MySQL BETWEEN 运算符不适用于 DATETIME 列

MySQL BETWEEN operator not working for DATETIME column

我不明白为什么 between 运算符在以下示例中不起作用:

CREATE TABLE orders (
    packed DATETIME
);

INSERT INTO orders VALUES ('2018-02-24 00:00:00');

SELECT COUNT(*) FROM orders WHERE packed = '2018-02-24 00:00:00';
SELECT COUNT(*) FROM orders WHERE (packed BETWEEN '2018-02-00 00:00:00' AND '2018-03-00 00:00:00');

第一个select查询returns1。第二个查询returns0。为什么?

MySQL版本:14.14 Distrib 5.7.21

取决于MySQL sql_mode (STRICT_MODE):

set sql_mode=NO_ZERO_IN_DATE;

DROP TABLE orders;
CREATE TABLE orders (
    packed DATETIME
);

INSERT INTO orders VALUES ('2018-02-24 00:00:00');

SELECT COUNT(*) FROM orders WHERE packed = '2018-02-24 00:00:00';
-- 1
SELECT COUNT(*) FROM orders 
WHERE (packed BETWEEN '2018-02-00 00:00:00' AND '2018-03-00 00:00:00');
--0

DBFiddle Demo

但是:

SELECT @@sql_mode; 
-- STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


CREATE TABLE orders (
    packed DATETIME
);

INSERT INTO orders VALUES ('2018-02-24 00:00:00');

SELECT COUNT(*) FROM orders WHERE packed = '2018-02-24 00:00:00';
-- 1
SELECT COUNT(*) FROM orders 
WHERE (packed BETWEEN '2018-02-00 00:00:00' AND '2018-03-00 00:00:00');
-- 1

DBFiddle Demo2


正确的方法是始终提供有效日期。