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。
我正在练习和试验 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。