1

我有一个存储过程,它需要一个日期字符串参数。传入的数据看起来像yyyy-MM-dd数据库中的表格,日期保存在表格中2012-02-26 06:00:00.000(附有时间。当我运行 sql 时,它总是不返回任何内容,因为它找不到比较:

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

2 回答 2

1

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

有关选项,请参阅

于 2012-04-23T14:46:46.903 回答
1

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

要以最少的更改修复现有代码,请更改T_dateCONVERT(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
于 2012-04-23T14:48:12.117 回答