我有一个存储过程,它需要一个日期字符串参数。传入的数据看起来像yyyy-MM-dd
数据库中的表格,日期保存在表格中2012-02-26 06:00:00.000
(附有时间。当我运行 sql 时,它总是不返回任何内容,因为它找不到比较:
'select t_typday from ' + @dbName+ '.dbo.Calendar ' +
' where T_date LIKE ''' + @dateFilter + '%''';
您需要将表中的日期转换为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 + '%''';
如果您不执行转换,您将比较本地格式字符串(基于@@LANGUAGE
设置),例如Apr 12 2012 12:00AM
与@dateFilter
包含2012-04-12
. 这就是比较不起作用的原因。
当然DATE
,正如一些评论已经提到的那样,将类型参数传递到您的存储过程中将是一个更好的解决方案。这将允许您使用简单的表达式将日期T_date
与传入的DATE
值进行比较,@dateFilter
例如:
CONVERT(DATE,T_date)=@dateFilter