Data truncation: Incorrect datetime value: ‘2021-10%‘ for column ‘MaxChargeDate‘ at row 1;

调用存过会报出这样的错误提示,Data truncation: Incorrect datetime value: ‘2021-10%’ for column ‘MaxChargeDate’ at row 1;

出现这个问题的原因是因为数据库配置了时间格式为严格模式,所以严格要求世家是在有效的时间范围内的(1997-07-07 00:00:00),但是你写成(0000-00-00 00;00:00)这种格式或者其他格式都是不符合严格模式下的时间格式,所以都会报错。

遇到这种情况要么你修改数据库的配置,将严格模式修改为非严格模式。(但是在开发中往往不建议做这样的修改)

1.可以通过执行SQL语句来开启,但是只对当前连接有效,下面是SQL语句:

set  sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

通过修改MySQL的配置文件,在配置文件中查找sql-mode,如果查找不到sql-mode=则在[mysqld]下加入即可,推荐第二种方法,可以一劳永逸将此行修改成为:

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2.永久关闭严格模式需要修改配置文件my.ini

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

将上面的代码修改为后面这种就会关闭掉

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

一种处理方式就是修改你的代码逻辑,将不符合的时间格式输入通过逻辑处理转变成符合严格模式要求的时间各个在加入到查询过滤条件中。

-- 原始需求
-- 在时间如果是12月份的时候会+1变成13其实就是下一年度的一月份但是使用下面的这种是没法满足要求的,于是做出了后面的两次修改
AND cl_financeprocess.MaxChargeDate>= CONCAT(v_start_month,'01')
AND  cl_financeprocess.MaxChargeDate< CONCAT(v_start_month+1,'01')

-- 通过模糊匹配直接查询所有12月份的
and cl_financeprocess.MaxChargeDate like concat(concat(left(v_start_month,4),'-',RIGHT(v_start_month,2)),'%')
202112
2021-12%
-- 上面代码会报错
 SQL [{call proc_sum_month_realy_income_confirm_endtime(?, ?, ?)}]; 
 Data truncation: Incorrect datetime value: '2021-10%' for column 'MaxChargeDate' at row 1;

-- 做逻辑修改变成如下
AND  cl_financeprocess.MaxChargeDate< CONCAT(if(RIGHT(v_start_month+1,2)=13,concat(left(v_start_month+100,4),'01'),v_start_month+1),'01')
202112
20220101
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值