当按某个时间删除数据时,如果该时间是datetime类型,而条件语句里面比较的对象是date类型(XXXX-XX-XX)时,若服务器数据库版本较高,继续这样删除数据时会出现如下错误:
org.springframework.dao.DataIntegrityViolationException: StatementCallback; SQL [DELETE FROM ct_ppv_order WHERE orderDate like
' 17-07-31%']; Data truncation: Incorrect datetime
value:
' 17-07-31%' for column
'orderDate' at row
1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime
value:
' 17-07-31%' for column
'orderDate' at row
1
解决办法: 利用date_format(orderDate,'%Y-%m-%d')将datetime型的数据转为date形式,不再用like去比较 eg:
//将订购时间为该批次统计时间的数据都清空
String sql2 = "
DELETE FROM ct_ppv_order
WHERE date_format(orderDate,'%Y-%m-%d') =
'" + beforeNowDateToString + "'";
将orderDate用date_format()转换为date类型,再和条件语句里的beforeNowDateToString 作比较。