2

我在使用以下简单查询时遇到问题

SELECT * FROM users WHERE Created = '28/02/2013'

问题是列CREATED是一种datetime数据类型,因此只要时间戳为 0:00:0,查询就可以正常执行,如果时间戳设置为 12:00,则查询不会返回结果集。

知道为什么吗?

谢谢

4

4 回答 4

3

因为您没有指定时间,所以它假设您正在做:

SELECT * FROM users WHERE Created = '28/02/2013 00:00:00'

如果你想要一整天,那么你需要一个时间范围:

SELECT * 
FROM users 
WHERE Created >= '20130228' AND Created < '20130301'

此外,请使用明确的日期格式 ( 'YYYYMMDD') 而不是其他格式。

于 2013-02-28T14:21:14.730 回答
1
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'

这将使用索引

于 2013-02-28T14:20:09.753 回答
1

如果您不需要考虑时间:尝试将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
于 2013-02-28T14:21:57.713 回答
-1

您必须将列转换为日期,然后进行比较

SELECT * FROM users WHERE CONVERT(VARCHAR(11), Created, 106) = '28 Feb 2013'
于 2013-02-28T14:20:28.220 回答