我有这样一个问题:

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

但即使有1号的数据,这也没有给出结果.

created_at看起来像2013-05-01 22:25:19,我怀疑这和时间有关?如何解决这个问题?

如果我 Select 更大的日期范围,它就可以正常工作,但它也应该(包括)适用于单一日期.

推荐答案

包括is英镑在内.您正在将日期时间与日期进行比较.第二个日期被解释为午夜when the day starts.

解决这个问题的一种方法是:

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)的长篇博客,他在博客中讨论了这个和其他日期问题.

Sql相关问答推荐

判断Pyspark生成的SQL查询

如何在case语句中使用条件来计算成对变量

使用SQL旋转表的列(Snowflake)

出现5次后,将所有正斜杠替换为连字符

数据库索引:如何使用名称和类别对项目进行最佳索引?

如何根据特定的内部json元素值过滤postgres查询结果?

Oracle SQL根据列中的条件 Select 最大记录数

将计算列设置为持久化的目的是什么?

根据最大值为字母数字大小写分配数值

MS Access问题查询中的自定义字段

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

为什么左联接结果在MS Access数据库中不匹配

STContains、STIntersections和STWithin返回错误的地理结果

根据具有特定值的 ID 创建自定义组

如何在 SQL 中将两行(或多行)jsonb 数组合并为一行

SQL:考虑合并分支计算分支的增长百分比

如何显示最常引用条目的详细信息

String_Split 多列

如何筛选 GROUP BY 结果? HAVING 没有产生预期的结果

SQL Server 分区和 Run Case 语句