我有以下架构:
CREATE TABLE test (
colA DATETIME,
colB DATETIME
);
INSERT INTO test (colA, colB) VALUES ('2017-01-01', NULL);
这是我尝试在此架构上运行的一些 SQL:
SELECT
colA < IFNULL(colB, '9999-99-99') AS a,
colA < '9999-99-99' AS b,
IFNULL(colB, '9999-99-99') AS c
FROM test;
我的问题是...为什么在 SELECT 结果中,a
为 0,而 b
为 1? 2017-01-01 小于 9999-99-99...
鉴于 a
为 0...我该怎么做才能使其变为 1? IE。这样比较运算符右侧的日期/总是/设置为最新的可能日期(以便没有日期落在它之后..)
SQL fiddle :http://sqlfiddle.com/#!9/82fe8d/2
最佳答案
日期与非日期相比并没有多或少
以下查询将按预期工作
SELECT
colA < IFNULL(colB, '2017-01-02') AS a,
colA < '2017-01-02' AS b,
IFNULL(colB, '2017-01-02') AS c
FROM test;
你也可以尝试这个来看看我的意思:
SELECT
colA < IFNULL(colB, CAST('9999-99-99' AS DATETIME)) AS a,
colA < CAST('9999-99-99' AS DATETIME) AS b,
IFNULL(colB, '9999-99-99') AS c
FROM test;
关于mysql - DATETIME 上的 IFNULL 不适用于比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41815904/