为什么我为这个timestampdiff()得到一个NULL?

时间:2016-05-25 19:52:26

标签: mysql timestampdiff

为什么MySQL中的以下查询导致该timestampdiff()的空值?

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

3 个答案:

答案 0 :(得分:2)

timestampdiff()需要第二个和第三个参数的有效日期。 YEAR('2015-01-01')返回2015,这不是有效日期,会导致timestampdiff()中断,导致返回NULL。只需制作第二个参数'2015-01-01',只要您的EndDate好,就应该有效。

答案 1 :(得分:0)

尝试将年份转换为有效日期

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

答案 2 :(得分: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发现问题。