传递 0 秒字符串并从该值中减去时,如何避免 MYSQL CONVERT() 方法出错?
How to avoid error on MYSQL CONVERT() method, when passing a 0 second string and subtract from that value?
我正在使用 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),然后您减去一个,并且由于您要插入的列是日期时间,它会尝试将结果数字解释为 date/time,当减法产生 20201216061499 时失败。减去一秒的正确方法是说 - INTERVAL 1 SECOND
或使用 DATE_SUB(..., INTERVAL 1 SECOND)
.
我正在使用 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),然后您减去一个,并且由于您要插入的列是日期时间,它会尝试将结果数字解释为 date/time,当减法产生 20201216061499 时失败。减去一秒的正确方法是说 - INTERVAL 1 SECOND
或使用 DATE_SUB(..., INTERVAL 1 SECOND)
.