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

Why do I get a NULL for this 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

尝试将 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

timestampdiff() 需要第二个和第三个参数的有效日期。 YEAR('2015-01-01') returns 2015,这不是一个有效的日期,它打破了 timestampdiff() 导致它成为 return NULL。只需提出第二个参数 '2015-01-01',只要您的 EndDate 是好的,它就应该有效。

MySQL 不会自动将 YEAR(4) 数据类型转换为 DATETIME。我通过将 month/day 附加到 EndDate 来修复它,并将其视为 DATETIME。

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

感谢@Uueerdo 找出问题。