2017-01-23 60 views
0

工作,我有以下模式:IFNULL上DATETIME不攀比

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 is less than 9999-99-99 ...

而且考慮到a是0 ...我能做些什麼來使它成爲1?即。以便在比較運算符的右側的日期/總是/套最新的可能的日期(以便沒有日期之後它落在..)

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

回答

1

注意9999-99-99不是有效日期,您可以將其更改爲9999-12-31。這產生了更明智的結果。至於爲什麼你的查詢中的b得到1 ...我發現它在小提琴中有作用,但我不知道。

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;