【问题标题】:MySQL weird date_add intervalMySQL 奇怪的 date_add 间隔
【发布时间】:2025-12-24 16:05:06
【问题描述】:

我想在 MySQL 5.1.66-0+squeeze1 的日期时间上增加 1 个月。

当我这样做时:

SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)

结果是:

2013-08-19 17:36:34

没关系。但是当我这样做时:

SELECT DATE_ADD("2013-07-19 17:37:00", INTERVAL 1 MONTH)

结果是:

323031332d30382d31392031373a33373a3030

同理:

SELECT DATE_ADD("2013-07-19", INTERVAL 1 MONTH)

结果是:

323031332d30382d3139

我不明白怎么了:(

谢谢。

编辑:我试过了,但错误是一样的。

SELECT DATE_ADD("2013-07-19", INTERVAL 31 DAY)
SELECT ADDDATE("2013-07-19", 31)

【问题讨论】:

  • 您的示例在 SQLFiddle 版本 5.161 (sqlfiddle.com/#!8/d41d8/234) 上正常工作。
  • 我在 MySQL 5.1.66-0+squeeze1 (phpMyAdmin 4.0.3) 上。 PMA 出错?
  • 我更新到 PMA 4.0.4.1。同样的错误,不是 PMA :(

标签: mysql date intervals


【解决方案1】:

你的例子对我也很好,它可能是一个配置错误...尝试将结果转换为日期:

SELECT DATE(DATE_ADD('2013-07-19', INTERVAL 1 MONTH))

【讨论】:

  • 有效!谢谢你。但我不明白我的第一个查询不起作用:(
【解决方案2】:

试试这个

    SELECT DATE_ADD("2013-07-19", INTERVAL 31 DAY)

编辑:

MySQL 5.1.595.1.61,处理与日期相关的断言的更改导致多个函数在将 DATE() 函数值作为参数传递时变得更加严格,并拒绝日期部分为零的不完整日期.这些函数受到影响:CONVERT_TZ()、DATE_ADD()、DATE_SUB()、DAYOFYEAR()、LAST_DAY()、TIMESTAMPDIFF()、TO_DAYS()、TO_SECONDS()、WEEK()、WEEKDAY()、WEEKOFYEAR()、YEARWEEK ()。因为这改变了通用可用性状态系列 MySQL 5.1 中的日期处理行为,所以在 5.1.62 中恢复了该更改。

你也可以这样做

     SELECT ADDDATE('2013-07-19', 31);

【讨论】:

  • 结果:323031332d30382d3139