Hel*_*Out 67 sql sql-server compare date
我有一张日期表,所有日期都发生在11月.我写了这个查询
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-04-12'
Run Code Online (Sandbox Code Playgroud)
此查询应返回第11个月(11月)发生的所有事件,因为它发生在 "2013-04-12"日期之前(12月)
但它只返回在小于04(2013- 04 -12)的日子里发生的可用日期
可能只是比较一天的部分吗?而不是整个约会?
如何解决这个问题?
Created_date的类型为date
日期格式默认为yyyy-dd-MM
Pan*_*vos 68
而不是'2013-04-12',其含义取决于当地文化,使用被认为是文化不变格式的'20130412'.
如果你想与12月4 日比较,你应该写'20131204'.如果你想与4月12 日比较,你应该写'20130412'.
文章写国际化Transact-SQL语句从SQL Server的文档解释了如何编写的文化不变的语句:
使用其他API或Transact-SQL脚本,存储过程和触发器的应用程序应使用未分离的数字字符串.例如,yyyymmdd为19980924.
编辑
由于您使用的是ADO,因此最好的选择是参数化查询并将日期值作为日期参数传递.这样您就可以完全避免格式问题,并获得参数化查询的性能优势.
UPDATE
要在文字中使用ISO 8601格式,必须指定所有元素.引用datetime文档的ISO 8601部分
要使用ISO 8601格式,必须以格式指定每个元素.这还包括T,冒号(:)和格式中显示的句点(.).
......第二个组件的分数是可选的.时间组件以24小时格式指定.
Nit*_*esh 28
试试这样吧
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-12-04'
Run Code Online (Sandbox Code Playgroud)
如果您仅与日期值比较,则将其转换为日期(而不是datetime)将起作用
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= convert(date,'2013-04-12',102)
Run Code Online (Sandbox Code Playgroud)
在使用GetDate()函数期间,此转换也适用
| 归档时间: |
|
| 查看次数: |
516556 次 |
| 最近记录: |