2016-05-25 20 views
1

MySQLで次のクエリがそのtimestampdiff()に対してnullになるのはなぜですか?なぜこの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

はい。私は月/日を追加することでそれを修正し、datetimeと見なします。 '終了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と見なします。問題を識別するための@Uueerdoへ

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

感謝。

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を返します。 2番目の引数を'2015-01-01'にして、EndDateが良い場合は正常に動作します。

+0

@UUeerdoが理解したように、YEAR(4)データ型を日付に変換しませんでした。私は月/日を追加することでそれを修正し、datetimeと見なします。 '終了EndDate、 CONCAT(EndDate、 ' - 01-01')a、 timestampdiff(YEAR、STR_TO_DATE( '2015-01-01'、 '%Y-%m-%d')、CONCAT(EndDate 、 ' - 01-01'))d FROM tblboard' –

関連する問題