我有一个存储过程,它将日期作为字符串参数。进入的数据看起来像数据库中的yyyy-MM-dd
形式,日期以2012-02-26 06:00:00.000
的形式保存(时间附加到它们。当我运行sql时,它总是返回任何内容,因为它无法找到比较:
'select t_typday from ' + @dbName+ '.dbo.Calendar ' +
' where T_date LIKE ''' + @dateFilter + '%''';
答案 0 :(得分:1)
答案 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