2017-10-19 193 views
2

我有一个表中的日期格式为字符串在下面的方式YYYY-MM-DD。 数据包含若干年的数据,我想拉就在当年使用下面的查询:SQL Server - 其中Like语句的变量返回没有结果

Declare @currentYear VARCHAR(5) 
Select @currentYear = year(getdate()) 

select * 
from tablename 
where datefixed like @currentYear 

上面的查询没有返回任何结果。 我试过以下线程中列出的方法:Using variable in SQL LIKE statement

我错过了一些东西,但我不能把手指放在上面。

+0

您试图在日期中使用like like for strings命令尝试在startdate和endDate之间使用 – RegBes

+3

我们应该停止回答问题,其中OP要求帮助解决查询级别的混乱数据库设计问题。也许他们首先会开始使用正确的类型。通常情况下,查询将很简单:'WHERE YEAR(datefixed)= YEAR(GETDATE())' –

+0

谢谢@TimSchmelter。我们的新设计使用yyyymmdd,它允许使用简单的语句和简单的语句。 –

回答

3

你忘了尾随通配符%

select * 
from tablename 
where datefixed like @currentYear + '%' 
+0

我很感激帮助。这似乎拉正确。 –

2

您可以使用这样的:如果你想要一个像运营商使用,您必须确保datefixed

Declare @currentYear int 
Select @currentYear = year(getdate()) 

select * 
from tablename 
where year(convert(datetime,replace(datefixed,'-',''))) = @currentYear 

是一个字符串类型( varchar,char等)并添加通配符(%)

+0

他存储的字符串不是日期时间 –

+0

由于格式为'YYYY-MM-DD'可能会引发异常 –

+0

完美@MelgoV,这也适用。我们目前正在使用yyyymmdd,这很容易处理。 –