Sql 比较日期列表

Sql 比较日期列表,sql,vb.net,ado.net,Sql,Vb.net,Ado.net,在我的SQL WHERE caluse中,我检查报告日期是否在传递给SQL存储过程的日期列表中 WHERE REPORT_RUN_DATE IN (@REPORT_RUN_DATES) 假设@REPORT\u RUN\u DATE等于'11/09/2013' 这不匹配(没有返回记录),因此,在比较中,我将日期字段与在传递到存储过程之前已转换为字符串的日期进行比较。于是我试了一下 WHERE CONVERT(VARCHAR, REPORT_RUN_DATE, 101) IN (@REPORT_R

在我的SQL WHERE caluse中,我检查报告日期是否在传递给SQL存储过程的日期列表中

WHERE REPORT_RUN_DATE IN (@REPORT_RUN_DATES)
假设
@REPORT\u RUN\u 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
子句的大多数示例都与
整数或
字符串有关,但与
日期无关。我使用VB.NET 2012通过ADO.NET传递参数。通过我的代码,我知道这些值是正确传递的,并且这些值应该返回一个结果集


任何关于如何继续的建议都将不胜感激……

您不能像那样只传递多个值。最后将字符串作为单个值传递,然后SQL将日期列作为字符串与传入的值进行比较:

以下是一些选项:

  • 使用多个日期参数(2?、3?)
  • 为存储过程创建表值参数类型
  • 使用不同的日期多次调用存储过程(在VB代码中循环)
  • 在VB中生成SQL,而不是调用存储过程(需要小心SQL注入)
  • 反向比较并使用类似的

     WHERE @REPORT_RUN_DATES LIKE '%' + CONVERT(DATE, REPORT_RUN_DATE, 101) + '%' 
    

尝试使用(@REPORT\u RUN\u DATES)
中的转换(DATE,REPORT\u RUN\u DATE,101)中的
子句中的
中不能使用单个逗号分隔的列表。它必须是单独的值您确定在列
报告\运行\日期
中没有保存时间部分吗?即。对于所有记录,所有日期的时间部分都是00:00:00?