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
但是:
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
正确的方法是始终提供有效日期。
我不明白为什么 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
但是:
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
正确的方法是始终提供有效日期。