SQL“之间”不包括在内

新手上路,请多包涵

我有一个这样的查询:

 SELECT * FROM Cases WHERE created_at BETWEEN '2013-05-01' AND '2013-05-01'

但这没有给出任何结果,即使有 1 日的数据。

created_at 看起来像 2013-05-01 22:25:19 ,我怀疑它与时间有关?如何解决?

如果我做更大的日期范围,它工作得很好,但它也应该(包括)与单个日期一起工作。

原文由 JBurace 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 670
2 个回答

包容性的。您正在将日期时间与日期进行比较。 当一天开始时, 第二个日期被解释为午夜。

解决此问题的一种方法是:

 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 有一篇关于日期的长博客文章( 这里),在那里他讨论了这个和其他日期问题。

原文由 Gordon Linoff 发布,翻译遵循 CC BY-SA 4.0 许可协议

尽管它是包容性的,但根据 Aaron Bertrand 的建议在此处阅读更多信息

不要将 BETWEEN 用于日期/时间范围。

除了这里的其他好答案外,还可以使用 DATEADD (将天数添加到给定日期)如下

SELECT * FROM Cases WHERE created_at >= '2013-05-01' AND created_at < DATEADD(day, 1, '2013-05-01')

原文由 Gonçalo Peres 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进