错误代码 [1411];函数 str_to_date 的日期时间值不正确: '';嵌套异常是:函数 str_to_date 的日期时间值不正确:“”

error code [1411]; Incorrect datetime value: '' for function str_to_date; nested exception is : Incorrect datetime value: '' for function str_to_date

提问人:srinuvasarao atribiz 提问时间:11/16/2023 最后编辑:ewokxsrinuvasarao atribiz 更新时间:11/17/2023 访问量:26

问:

当我在实时服务器上运行基于 Web 的应用程序时,我出现上述错误。它运行良好,直到几天前我们服务器崩溃。现在重新安装后,我们遇到了上述错误。

但是,同一应用程序在我的本地系统中运行,没有该错误。

我什至尝试按照同行的建议在查询下方运行,但没有用。 请帮助解决问题。

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'ALLOW_INVALID_DATES';

SET SESSION sql_mode = '@old_sql_mode';
SET @old_sql_mode = @@sql_mode;

查询为 :>

insert into at_ph_stockist_invoice(stockist_id, invoice_no, invoice_date, invoice_amt, invoice_disc_per, invoice_disc,taxable_amt,gst_amt,
    final_invoice_amt,invoice_status, pymnt_type, po_amt, po_id, po_num, po_dt,final_amt, added_by, added_on, added_ip, status_id, 
    pay_bill_date, amount_received, change_given, balance) 
    values(#{stockistId}, #{invoiceNumber},  DATE_FORMAT(STR_TO_DATE(#{invoiceDate}, '%e-%b-%Y'), '%Y-%m-%d'), 
    #{invoiceAmmount}, #{discountPercentage}, #{discountAmmount},#{taxableAmt}, #{gstAmount}, #{finalInvoiceAmount},if(#{paymentType}='credit', 'pending', 'paid'), #{paymentType}, 
    #{poAmt}, #{poId}, #{poNumber}, DATE_FORMAT(STR_TO_DATE(#{poDate}, '%e-%b-%Y'), '%Y-%m-%d'),#{finalAmount}, 
    #{addedBy}, now(), #{addedIp}, fn_getcodevalue_id('STS','Active'), DATE_FORMAT(STR_TO_DATE(#{payBillDt}, '%e-%b-%Y'), '%Y-%m-%d'), 
    #{amountReceived}, #{chngGiven}, #{balance});
SQL 数据库 mysql-workbench

评论

1赞 jarlh 11/16/2023
您使用的是哪些 dbms?
0赞 Adrian Maxwell 11/17/2023
您能否检查所涉及的 3 个参数并找出它们实际发送到插入脚本的内容?正如您在下面看到的,我尝试复制但无法复制(这可能是由于 dbfiddle 配置) - 所以我认为可能需要更多细节。并且:编辑您的标签以指示您使用的 dbms,并告诉我们哪个版本 - 这些细节真的很重要。

答:

0赞 Adrian Maxwell #1

插入在 3 个位置使用str_to_date:

INSERT INTO at_ph_stockist_invoice (
    ...
    , invoice_date
    , ...
    , po_dt
    , ...
    , pay_bill_date
    , ...
    )
VALUES (
    ...
    , DATE_FORMAT(STR_TO_DATE(#{invoiceDate}, '%e-%b-%Y'), '%Y-%m-%d')
    , ...
    , DATE_FORMAT(STR_TO_DATE(#{poDate}, '%e-%b-%Y'), '%Y-%m-%d')
    , ...
    , DATE_FORMAT(STR_TO_DATE(#{payBillDt}, '%e-%b-%Y'), '%Y-%m-%d')
    , ...
    )

我无法使用 MySQL(或 MariaDb)

SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
SET SESSION sql_mode = 'NO_ZERO_DATE';

select
  STR_TO_DATE('', '%e-%b-%Y') a
, DATE_FORMAT(STR_TO_DATE('', '%e-%b-%Y'), '%Y-%m-%d') a1
, STR_TO_DATE(' ', '%e-%b-%Y') b
, DATE_FORMAT(STR_TO_DATE(' ', '%e-%b-%Y'), '%Y-%m-%d') b1
, STR_TO_DATE(null, '%e-%b-%Y') c
, DATE_FORMAT(STR_TO_DATE(null, '%e-%b-%Y'), '%Y-%m-%d') c1