将字符串日期与日期时间进行比较

时间:2012-04-23 14:37:34

标签: sql tsql datetime date

我有一个存储过程,它将日期作为字符串参数。进入的数据看起来像数据库中的yyyy-MM-dd形式,日期以2012-02-26 06:00:00.000的形式保存(时间附加到它们。当我运行sql时,它总是返回任何内容,因为它无法找到比较:

'select t_typday from ' + @dbName+ '.dbo.Calendar ' +
' where T_date LIKE ''' + @dateFilter + '%''';

2 个答案:

答案 0 :(得分:1)

您需要使用明确的日期格式 - 不能将其解释为几个可能的日期。

有关选项,请参阅thisthis

答案 1 :(得分:1)

您需要将表格中的日期转换为yyyy-mm-dd hh:mi:ss.mmm日期格式,然后使用LIKE将其与该格式的字符串参数进行比较:

要使用最少的更改修复现有代码,请将T_date更改为CONVERT(VARCHAR(50),T_date,121),生成:

'select t_typday from ' + @dbName+ '.dbo.Calendar ' + 
' where CONVERT(VARCHAR(50),T_date,121) LIKE ''' + @dateFilter + '%'''; 

如果您不执行转换,则需要将{strong>本地格式字符串(基于@@LANGUAGE设置)(例如Apr 12 2012 12:00AM)与@dateFilter中的字符串进行比较1}}例如包含2012-04-12。这就是比较不起作用的原因。

当然,将类型为DATE的参数传入存储过程将是一个更好的解决方案,因为已经提到过几条评论。这样,您就可以使用以下简单表达式将T_date中的日期与DATE中传入的@dateFilter值进行比较:

CONVERT(DATE,T_date)=@dateFilter