我在使用以下简单查询时遇到问题
SELECT * FROM users WHERE Created = '28/02/2013'
问题是列CREATED
是一种datetime
数据类型,因此只要时间戳为 0:00:0,查询就可以正常执行,如果时间戳设置为 12:00,则查询不会返回结果集。
知道为什么吗?
谢谢
我在使用以下简单查询时遇到问题
SELECT * FROM users WHERE Created = '28/02/2013'
问题是列CREATED
是一种datetime
数据类型,因此只要时间戳为 0:00:0,查询就可以正常执行,如果时间戳设置为 12:00,则查询不会返回结果集。
知道为什么吗?
谢谢
因为您没有指定时间,所以它假设您正在做:
SELECT * FROM users WHERE Created = '28/02/2013 00:00:00'
如果你想要一整天,那么你需要一个时间范围:
SELECT *
FROM users
WHERE Created >= '20130228' AND Created < '20130301'
此外,请使用明确的日期格式 ( 'YYYYMMDD'
) 而不是其他格式。
SELECT * FROM users WHERE CAST(Created AS DATE) = '28/02/2013'
会修复它,但要小心,它会禁用索引
SELECT * FROM users WHERE Created BETWEEN '28/02/2013 00:00' AND '28/02/2013 23:59'
这将使用索引
如果您不需要考虑时间:尝试将created
字段转换为date
然后比较为;
SELECT * FROM users WHERE convert(date,Created) = '28/02/2013'
--this would be even better with iso date format (not culture specific)
SELECT * FROM users WHERE convert(date,Created) = '20130228' --yyyymmdd format
您必须将列转换为日期,然后进行比较
SELECT * FROM users WHERE CONVERT(VARCHAR(11), Created, 106) = '28 Feb 2013'