BETWEEN 日期运算符的问题

Problems with BETWEEN dates operator

我正在练习和试验 SQL BETWEEN 运算符关于“https://www.w3schools.com/sql/sql_between.asp

日期的不同语法

这是我数据库中的 Order table:

LINK: https://www.w3schools.com/sql/sql_between.asp

查询正在获取 2 个日期的给定条件之间的订单日期。

这是两个主要的语法版本(根据 w3schools):

SELECT *
FROM Orders
WHERE OrderDate BETWEEN #01/07/1996# AND #31/07/1996#;

和:

SELECT * 
FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

我们从 Orders table

输入以上两个查询得到的输出

记录数:22(共 196 条记录)。是的,这是正确的。

现在我正在试验这个语法版本。

案例 #1:

SELECT * 
FROM Orders
WHERE OrderDate BETWEEN #1996/07/01# AND #1996/07/31#;

案例 #1 的结果:22(与上述语法相同)

在 SQL 试用编辑器(https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_between_date&ss=-1)中,他们声明此 SQL 声明在 WebSQL database.The 中不受支持这个例子仍然有效,因为它使用了 SQL 的修改版本。 为什么如此?

如果您在 Chrome 中使用 W3Schools Tryit 编辑器,则您使用的是 WebSQL, which is basically SQLite

SQLite 没有 date/time 格式,因此可能将日期值存储为 ISO-8601 格式的字符串(有关详细信息,请参阅 this answer) .

其他数据库系统(例如 Oracle、Microsoft SQL Server、Postgres、MySQL)具有内置日期格式,您通常将它们表示为字符串(用单引号引起来)。例如:'1997-07-01'(根据具体的RDBMS,可能会有更具体的考虑)。

使用井号的格式(例如 #7/1/1997#)是 Microsoft Access 独有的(有关详细信息,请参阅 this answer)。


底线:日期通常用单引号引起来。你最好坚持 ISO-8601 标准(例如 1997-07-01)。

如果您正在学习 SQL,除了 W3Schools,还有其他资源。我建议下载开源 RDBMS,如 Postgres 或 MySQL,设置示例数据库,并处理一些查询。 codewars 等挑战网站也可能有帮助


还有一件事:不要使用 BETWEEN 作为日期。使用 >=<,以确保您没有排除带有时间部分的日期。有关详细信息,请阅读 this blog