Mysql ADDTIME函数提供错误截断错误的时间值:“35 00:00:00”
试图了解ADDTIME实际上是如何工作的。 样本表:Mysql ADDTIME函数提供错误截断错误的时间值:“35 00:00:00”,mysql,datetime,Mysql,Datetime,试图了解ADDTIME实际上是如何工作的。 样本表: CREATE TABLE table3 ( id INT(11) NOT NULL AUTO_INCREMENT, update_time DATETIME NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=latin1; 样本数据: +-----+-----------------------+ | id | update_time
CREATE TABLE table3 (
id INT(11) NOT NULL AUTO_INCREMENT,
update_time DATETIME NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=latin1;
样本数据:
+-----+-----------------------+
| id | update_time |
+-----+-----------------------+
| 1 | 2017-09-13 18:55:24 |
| 2 | 2017-08-10 18:53:16 |
+-----+-----------------------+
如果执行以下查询,则会显示错误:
UPDATE table3 SET update_time = ADDTIME(NOW(), '60 00:00:00') WHERE id=1;
Error Code: 1292
Truncated incorrect time value: '60 00:00:00'
尽管以下查询工作正常:
UPDATE table3 SET update_time = ADDTIME(NOW(), '5 00:00:00') WHERE id=1;
试图不断增加日的价值,发现它在日=34之前工作良好,在日>34时休息;
找不到一个明确的答案,为什么它会在一个极限后打破。能解释一下它是如何工作的吗?
PS:我知道可以改用DATE\u ADD,我使用的是MySql 5.7.12。来源:
时间值的范围为“-838:59:59”到“838:59:59”
根据手册: MySQL以以下格式识别时间值: 作为“D HH:MM:SS”格式的字符串。您还可以使用以下“宽松”语法之一:“HH:MM:SS”、“HH:MM”、“D HH:MM”、“D HH”, 或“SS”。这里D表示天数,其值可以是0到34 作为“HHMMSS”格式的不带分隔符的字符串,前提是该字符串作为时间段有意义。例如,“101112”被理解为 “10:11:12”,但“109712”是非法的,它有一个荒谬的分钟部分 变成“00:00:00” 作为HHMMSS格式的数字,前提是它作为时间有意义。例如,101112被理解为“10:11:12”。以下 也可以理解其他格式:SS、MMSS或HHMMS 该限制与时间类型的范围有关,很可能与中所示的底层存储需求有关 您不能使用DATE_ADD而不是ADDTIME,因为前者会将时间戳/日期时间值转换为日期,并释放时间部分 改用:
838:59:59 = 34 days 22 hours 59 minutes 59 seconds
UPDATE table3 SET update_time = TIMESTAMPADD( DAY, 60, NOW() ) WHERE id = 1;