我有一个类似这样的查询:
SELECT * FROM Cases WHERE created_at BETWEEN '2013-05-01' AND '2013-05-01'但是,即使有1号的数据,这也没有给出任何结果。
created_at看起来像2013-05-01 22:25:19,我猜这和时间有关?如何解决这个问题呢?
如果我使用更大的日期范围,它工作得很好,但它也应该(包括)与单个日期一起工作。
发布于 2013-05-03 05:03:37
它是包容性的。您正在将日期时间与日期进行比较。第二个日期被解释为当天开始时的午夜。
解决此问题的一种方法是:
SELECT *
FROM Cases
WHERE cast(created_at as date) BETWEEN '2013-05-01' AND '2013-05-01'另一种修复方法是显式的二进制比较
SELECT *
FROM Cases
WHERE created_at >= '2013-05-01' AND created_at < '2013-05-02'Aaron Bertrand有一篇关于日期的长篇博客文章(here),在那里他讨论了这个和其他日期问题。
发布于 2013-05-03 05:05:54
您需要执行以下两个选项之一:
between条件中包含时间部分:... where created_at between '2013-05-01 00:00:00' and '2013-05-01 23:59:59' (不推荐...参见最后一段)between。注意,然后您必须在第二个值的基础上添加一天:... where (created_at >= '2013-05-01' and created_at < '2013-05-02')我个人的偏好是第二个选择。此外,有a very clear explanation on why它应该被使用。
发布于 2015-09-13 03:13:21
只需使用时间戳作为日期:
SELECT * FROM Cases WHERE date(created_at)='2013-05-01' https://stackoverflow.com/questions/16347649
复制相似问题