在我的SQL WHERE caluse中,我正在检查Report Date是否在我传递给SQL存储过程的日期列表中。
WHERE REPORT_RUN_DATE IN (@REPORT_RUN_DATES)
让我们说@REPORT_RUN_DATE
等于'11 / 09/2013'
那不匹配(没有返回记录)所以那么,看一下比较,我正在将日期字段与已经转换为字符串的日期进行比较,然后再传递给存储过程。所以我试过了。
WHERE CONVERT(VARCHAR, REPORT_RUN_DATE, 101) IN (@REPORT_RUN_DATES)
同样的问题。没有比赛。没有记录返回。日期作为字符串传递的原因可能有时我将在多个日期传递,例如''11/09/2013','11/14/2013''
这就是我使用IN子句的原因。我们不存储日期的任何时间部分,因此我只处理日期数据类型而不是datetime
或smalldatetime
。
我发现在T-SQL中使用IN
CLAUSE的大多数示例都与integers
或strings
有关,但与dates
无关。我正在使用VB.Net 2012通过ADO.NET传递我的参数。单步执行我的代码我知道值正确传递并且值应返回结果集。
任何关于如何进行的建议将不胜感激......
答案 0 :(得分:0)
你不能只传递多个这样的值。您最终将字符串作为单个值传递,然后SQL会将日期列作为字符串与传入的值进行比较:
以下是一些选项:
反转比较并使用LIKE
:
WHERE @REPORT_RUN_DATES LIKE '%' + CONVERT(DATE, REPORT_RUN_DATE, 101) + '%'