用SQL语句写查询介于两个时间之间的记录应该怎么写

朋友你好,我在公司做数据分析师的时候经常用到这条SQL语句。
当时我们有一个需求,过滤2 01 7 年1 2 月1 1 日到2 01 7 年1 2 月2 2 日的数据记录。

当时我们的数据库是MySQL。
我写了类似的语句,例如:
sql SELECT FROM 表名 WHERE '2 01 7 -1 2 -1 1 ' < DATE> 这条语句的要点是从表名中选择所有字段,但是只选择时间字段在2 01 7 年1 2 月1 1 日到2 01 7 年1 2 月2 2 日之间的记录。

记得有一次数据量非常大,有几百万条记录,查询需要几分钟才能得到结果。
当时我就觉得优化查询效率不失为一个好主意。
后来我开始研究索引,并向时间字段添加了索引。
此后,请求速度变得更快。

但是,如果我们谈论这一点,现代数据库技术发展得非常快。
有时我想如果我使用现在的技术,这个查询还会是这样吗?哈哈,技术在不断进步。

SQL语句如何判断一个日期在两个日期之间

坦率地说,实际上很容易确定 SQL 中的日期是否在两个日期之间。
您可以直接使用 BETWEEN 关键字,也可以通过 CASE WHEN 语句使用。
我们先来说说最重要的事情。
如果操作一张表,直接使用ANTARA就够了。
例如,在我们去年运行的一个项目中,我们使用了大约 3 000 个量级的数据集。
我们这样写:
sql SELECT CASE WHEN 时间字段介于“2 02 2 -01 -01 ”和“2 02 2 -1 2 -3 1 ”之间,然后选择“true”,否则选择“false”END FROM 表 1 ;
这里,“2 02 2 -01 -01 ”和“2 02 2 -1 2 -3 1 ”是您需要评估的最小和最大时间,时间字段是您要评估的日期字段的名称,表1 是包含该字段的表的名称。

另一方面,如果涉及到多表关联,情况就相当复杂了。
您可以将 JOIN 语句与 BETWEEN 关键字结合使用。
例如,我们有两个表,表1 和表2 ,它们通过ID字段关联起来。
表2 有两个时间字段,时间1 和时间2 可以这样写:
sql 选择以下情况:时间字段 BETWEEN b.时间 1 和 b。
时间 2 THEN '真' ELSE '假' END 从表 1 a JOIN 表 2 b ON a.ID = b.ID;
在这个例子中,a.时间字段是表1 b中的日期字段。
时间 1 和 b。
时间2 是表2 中的两个日期字段。
通过JOIN语句,我们根据ID字段关联两个表。

一开始我以为直接使用BETWEEN关键字就足够了,但后来发现是错误的。
有时您可能需要更复杂的逻辑,这时 CASE WHEN 语句就派上用场了。

等等,还有一件事,记住日期值必须用单引号括起来,并且格式必须与数据库中的日期格式一致,否则会出现问题。

最后,提醒一下。
很多人不重视这一点。
在实际应用中,字段名和表名可能需要根据具体需要进行调整。
我认为值得尝试一下,看看哪种方法更适合您的项目需求。