如何避免MYSQL CONVERT()方法在传递0秒字符串并从该值中减去时出错



我使用的是MySQL 8,对这种类型的查询有问题:INSERT INTO review(name,create_date(VALUES('name',CONVERT(timestamp,DATETIME(-1(在where子句中使用此表达式时,我没有遇到过此错误。当时间戳的值类似于"2020-12-16 06:15:01"时,它就起作用了。

但如果值为0秒(如:"2020-12-16 06:15:00"(,则会删除一个错误。

Incorrect datetime value: '20201216061499' for column 'create_date' at row 1
code: ER_TRUNCATED_WRONG_VALUE
errno: 1292
sqlState: 22007

我在整个项目中都使用了这种类型的表达式。这个问题有没有一个简单的解决方案,而不改变每个表达式?那是个虫子吗?

这个问题的一个解决方案是:

DATE_SUB(CONVERT(timestamp,DATETIME) INTERVAL 1 SECOND). 

但正如我已经提到的,这需要改变每个表达式。

您确实需要更新每个表达式。当你从时间戳中减去一个数字时,它首先将你的时间戳转换为一个数字(例如20201216061500(,然后你减去一,因为你插入的列是日期时间,它试图将得到的数字解释为日期/时间,当减法产生20201216061499时失败。减去一秒的正确方法是说- INTERVAL 1 SECOND或使用DATE_SUB(..., INTERVAL 1 SECOND)

相关内容

  • 没有找到相关文章

最新更新