我有一个存储过程,它需要一个日期字符串参数。传入的数据看起来像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