在DATETIME上的IFNULL不适用于比较

时间:2017-01-23 21:23:47

标签: mysql sql sql-date-functions

我有以下架构:

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结果中,b为1时为0? 2017-01-01小于9999-99-99 ......

鉴于a为0 ...我该怎样做才能使它成为1?即。这样,比较运算符右侧的日期/总是/设置为最新的可能日期(以便日期之后没有日期......)

SQL小提琴:http://sqlfiddle.com/#!9/82fe8d/2

2 个答案:

答案 0 :(得分:1)

与非日期相比的日期不多于或少于

以下查询将按预期工作

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;

答案 1 :(得分:1)

注意9999-99-99不是有效日期,您可以将其更改为9999-12-31。这会产生更明智的结果。至于为什么b在您的查询中获得1 ...我发现它确实在小提琴中,但我不知道。