2016-05-25 52 views
1

爲什麼MySQL中的以下查詢會導致timestampdiff()的值爲空?爲什麼我得到這個timestampdiff()的NULL?

SELECT EndDate, /* EndDate is YEAR(4) datatype with value 2013 */ 
     year('2015-01-01') a, 
     timestampdiff(YEAR, Year('2015-01-01'), EndDate) b 
    FROM table 

結果:

EndDate  a  b 
    2013 2015 NULL 
+0

我的猜測是因爲'YEAR'不是日期或日期時間數據類型。 https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff – Uueerdo

+0

是的。我通過追加一個月/日來修復它,並將其視爲日期時間。 'SELECT EndDate, CONCAT(EndDate,' - 01-01')a, timestampdiff(YEAR,STR_TO_DATE('2015-01-01','%Y-%m-%d'),CONCAT(EndDate ,' - 01-01'))d FROM tblboard' –

回答

0

MySQL不會自動將YEAR(4)數據類型轉換爲DATETIME。我通過向EndDate添加一個月/天來修復它,並將其視爲DATETIME。

SELECT EndDate, timestampdiff(YEAR, STR_TO_DATE('2015-01-01','%Y-%m-%d'), CONCAT(EndDate,'-01-01')) d FROM table

由於@Uueerdo用於識別的問題。

0

嘗試stingr轉換年內有效日期

SELECT EndDate, /* EndDate is YEAR(4) datatype with value 2013 */ 
    STR_TO_DATE('2015-01-01','%Y-%m-%d') a, 
    timestampdiff(YEAR, STR_TO_DATE('2015-01-01','%Y-%m-%d'), EndDate) b 
FROM table 
1

timestampdiff()需要第二個和第三個參數的有效日期。 YEAR('2015-01-01')返回2015,這不是一個有效的日期,它打破timestampdiff()導致它返回NULL。只要做第二個參數'2015-01-01',只要你的EndDate好,它應該工作。

+0

由於@UUeerdo想通了,它沒有將YEAR(4)數據類型轉換爲日期。我通過追加一個月/日來修復它,並將其視爲日期時間。 'SELECT EndDate, CONCAT(EndDate,' - 01-01')a, timestampdiff(YEAR,STR_TO_DATE('2015-01-01','%Y-%m-%d'),CONCAT(EndDate ,' - 01-01'))d FROM tblboard' –

相關問題