DATETIME 上的 IFNULL 不适用于比较
IFNULL on DATETIME doesn't work with comparisons
我有以下架构:
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;
我的问题是...为什么 a
在 SELECT 结果中是 0 而 b
是 1? 2017-01-01 小于 9999-99-99...
鉴于 a
为 0...我该怎么做才能使它为 1? IE。这样比较运算符右侧的日期/总是/设置为可能的最新日期(这样后面就没有日期了..)
SQL Fiddle: http://sqlfiddle.com/#!9/82fe8d/2
一个日期与 non-date 相比不多也不少
以下查询将按预期工作
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;
注意到 9999-99-99
不是有效日期,您可以将其更改为 9999-12-31
。这会产生更明智的结果。至于为什么 b
在您的查询中得到 1
... 我看到它在 fiddle 中确实如此,但我不知道。
我有以下架构:
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;
我的问题是...为什么 a
在 SELECT 结果中是 0 而 b
是 1? 2017-01-01 小于 9999-99-99...
鉴于 a
为 0...我该怎么做才能使它为 1? IE。这样比较运算符右侧的日期/总是/设置为可能的最新日期(这样后面就没有日期了..)
SQL Fiddle: http://sqlfiddle.com/#!9/82fe8d/2
一个日期与 non-date 相比不多也不少
以下查询将按预期工作
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;
注意到 9999-99-99
不是有效日期,您可以将其更改为 9999-12-31
。这会产生更明智的结果。至于为什么 b
在您的查询中得到 1
... 我看到它在 fiddle 中确实如此,但我不知道。