SQL Server日期比较忽略年份

Ins*_*Pro 4 sql sql-server sql-server-2005

我正在SQL Server 2005上运行查询以查找日期范围内的记录.该WHERE子句如下所示:

WHERE (CONVERT(NVARCHAR, fldPublishedDate, 101) >= '" & toDate & 
   "' AND CONVERT(NVARCHAR, fldPublishedDate, 101) <= '" & fromDate & "')"
Run Code Online (Sandbox Code Playgroud)

toDatefromDate被输入这样的04/01/200504/30/2005.

我得到的结果肯定都是在4月1日到30日之间,但是从2005年(数据收集开始时)到2012年的各个年份.看起来年份在比较中被忽略了.我在这里错过了什么吗?

感谢您抽出宝贵时间阅读本文.

Aar*_*and 6

你为什么要转换成字符串?当然,这不能按预期工作.你说的是:

IF '12/02/2010' > '09/12/2012'
Run Code Online (Sandbox Code Playgroud)

这当然会产生真实的结果.你应该说:

WHERE fldPublishedDate >= '20050401'
  AND fldPublishedDate < DATEADD(DAY, 1, '20050430');
Run Code Online (Sandbox Code Playgroud)

仅当您仅比较日期范围时,才需要将列转换为日期.最重要的是,您应该以明确的格式传递日期,这种格式不受区域和语言设置的影响(例如YYYYMMDD).101不是一种安全的风格,因为英国人在哪个月是04/06/2012?那是6月,而不是4月.我怀疑你应该在你的(经典ASP?)代码中更好地格式化这些日期,或者从你正在使用的任何语言中传入适当的日期时间数据类型.最后,不要在没有长度的情况下使用NVARCHAR: