运算符之间的MySQL不适用于DATETIME列

运算符之间的MySQL不适用于DATETIME列,mysql,between,Mysql,Between,我不明白为什么在以下示例中,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-

我不明白为什么在以下示例中,
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
查询返回
1
。第二个查询返回
0
。为什么?


MySQL版本:
14.14发行版5.7.21

它取决于MySQL sql\u模式(
STRICT\u模式
):

但是:



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

2月0日不是有效日期(无效日期将替换为0)。换成1号。@solarflar非常感谢。你应该回答这个问题。
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
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