該SQL返回MySQL 5.5中的DATE
,但返回MySQL 5.6中的NULL
。爲什麼?STR_TO_DATE MySQL 5.5和MySQL 5.6之間的差異
select date(STR_TO_DATE('2015-01', '%Y-%m')) + INTERVAL 1 DAY;
這裏有一個SQL小提琴爲MySQL 5.5和5.6。 STR_TO_DATE
在兩種情況下均返回日期。使用DATE
轉換結果的作品。試圖添加INTERVAL
時出現問題。不要緊,如果我將INTERVAL
添加到STR_TO_DATE(...)
或DATE(STR_TO_DATE(...))
,結果是一樣的。但是,刪除STR_TO_DATE
會使其正常工作。
select
STR_TO_DATE('2015-01', '%Y-%m') as same_a1,
STR_TO_DATE('2015-01-01', '%Y-%m') as same_a2,
STR_TO_DATE('2015-01', '%Y-%m-%d') as same_a3,
STR_TO_DATE('2015-01-01', '%Y-%m-%d') as same_a4,
date(STR_TO_DATE('2015-01', '%Y-%m')) as same_b1,
date(STR_TO_DATE('2015-01-01', '%Y-%m')) as same_b2,
date(STR_TO_DATE('2015-01', '%Y-%m-%d')) as same_b3,
date(STR_TO_DATE('2015-01-01', '%Y-%m-%d')) as same_b4,
STR_TO_DATE('2015-01', '%Y-%m') + INTERVAL 1 DAY as same_c1,
STR_TO_DATE('2015-01-01', '%Y-%m') + INTERVAL 1 DAY as same_c2,
STR_TO_DATE('2015-01', '%Y-%m-%d') + INTERVAL 1 DAY as same_c3,
STR_TO_DATE('2015-01-01', '%Y-%m-%d') + INTERVAL 1 DAY as same_c4,
date(STR_TO_DATE('2015-01', '%Y-%m')) + INTERVAL 1 DAY as different_d1,
date(STR_TO_DATE('2015-01-01', '%Y-%m')) + INTERVAL 1 DAY as different_d2,
date(STR_TO_DATE('2015-01', '%Y-%m-%d')) + INTERVAL 1 DAY as different_d3,
date(STR_TO_DATE('2015-01-01', '%Y-%m-%d')) + INTERVAL 1 DAY as same_d4,
date('2015-01') + INTERVAL 1 DAY as same_e1,
date('2015-01-01') + INTERVAL 1 DAY as same_e2
;
我搜索了發行說明,但找不到任何東西。到底是怎麼回事?這是一個已知的變化嗎?一個錯誤?
對於它的價值,我看到5.1.73和MariaDB 10.0.21之間的差異。 –
使用MySQL CLI客戶端而不是SQLFiddle,我發現'STR_TO_DATE()'在沒有給定日期值時會產生一個奇怪的結果:'SELECT STR_TO_DATE('2015-03')'產生'2015-03-00'。我無法添加日期。它在舊版本和新版本中產生「第00天」的事實似乎是錯誤的,但是在給定奇怪行爲的情況下,如果不在更高版本中接收NULL,則無法向該無效日期添加時間間隔似乎是正確的。舊版本允許我將「day 00」添加1天爲「SELECT DATE(STR_TO_DATE('2015-03','%Y-%m'))+ INTERVAL 1 DAY;'導致'2015-03- 01' –
^^ ...這不是我期望的結果。我期望它從「2015-03-01」開始,並在「2015-03-02」中添加1天。 –