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)
toDate和fromDate被输入这样的04/01/2005和04/30/2005.
我得到的结果肯定都是在4月1日到30日之间,但是从2005年(数据收集开始时)到2012年的各个年份.看起来年份在比较中被忽略了.我在这里错过了什么吗?
感谢您抽出宝贵时间阅读本文.
你为什么要转换成字符串?当然,这不能按预期工作.你说的是:
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:
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |