mysql – 不正确的DateTime值’0000-00-00 00:00:00′ – Date_Sub()in Having
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 不正确的DateTime值’0000-00-00 00:00:00′ – Date_Sub()in Having,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2976字,纯文字阅读大概需要5分钟。
内容图文
![mysql – 不正确的DateTime值’0000-00-00 00:00:00′ – Date_Sub()in Having](/upload/InfoBanner/zyjiaocheng/901/c709ef533fcc4c8291e81150db3c8ba1.jpg)
所以我有一个看起来像这样的插入:
INSERT INTO TempDupeData (Sys_InvoiceID, DupeSetID, Netted, InvoiceNo, InvoiceDate, Sys_SupplierID, SuppInvNo, NetAmount, VATAmount, GrossAmount, PayDate, PayRef,PayRefNo, PayType,
PayAmount, Curr, GBPNetAmount, GBPVATAmount, GBPGrossAmount, NetAmountAbs, GrossAmountAbs, VATAmountAbs, DocType, SuppInvNoNums, VATPerc, VATA, VATB, VATC,
VATD, VATE, VATPotentialClaim, ClaimStatus, SuppInvNoSubst, SuppInvNoSubstFlag, DupeSubstGross, DupeSubstNet, SuppInvNoCharMap, SuppInvNoCharMapFlag, SeqErrFlag)
SELECT
FK_SysInvoiceID,
CONCAT(CTE.NetAmountAbs, CTE.AccountNumber),
Netted,
InvoiceNo,
InvoiceDate,
I.FK_SupplierID,
SuppInvNo,
NetAmount,
VATAmount,
GrossAmount,
PayDate,
PayRef,
PayRefNo,
PayType,
PayAmount,
Curr,
GBPNetAmount,
GBPVATAmount,
GBPGrossAmount,
CTE.NetAmountAbs,
GrossAmountAbs,
VATAmountAbs,
DocType,
SuppInvNoNums,
VATPerc,
VATA,
VATB,
VATC,
VATD,
VATE,
VATPotentialClaim,
ClaimStatus,
SuppInvNoSubst,
SuppInvNoSubstFlag,
DupeSubstGrs,
DupeSubstNet,
SuppInvNoCharMap,
SuppInvNoCharMapFlag,
SeqErrFlag
FROM (SELECT
FK_SupplierID,
AccountNumber,
NetAmountAbs,
CASE WHEN MIN(NetAmountAbs) < SUM(NetAmount) THEN 0 ELSE -1 END AS Netted
FROM invoice
WHERE NetAmountAbs >= 500 and InvoiceDate IS NOT null
GROUP BY FK_SupplierID,
NetAmountAbs
HAVING COUNT(*) > 1
AND ((SUM(CASE WHEN NetAmount >= 0 THEN 1 ELSE 0 END)) > 1)
AND (MAX(SuppInvNoNums) != MIN(SuppInvNoNums))
AND (MIN(InvoiceDate) != MAX(InvoiceDate))
AND (DATE_SUB(MAX(COALESCE(InvoiceDate, NOW())) <= MIN(COALESCE(InvoiceDate, NOW())), INTERVAL 30 DAY))
AND (MAX(GrossAmountAbs) != MIN(GrossAmountAbs))) CTE
INNER JOIN invoice I
ON CTE.NetAmountAbs = I.NetAmountAbs
AND CTE.FK_SupplierID = I.FK_SupplierID
ORDER BY CTE.NetAmountAbs DESC, CTE.FK_SupplierID;
它从表中执行,执行一些计算,连接自身然后插入.它失败了这条消息:不正确的DateTime值’0000-00-00 00:00:00′.我缩小了它,如果我从having子句中删除这一行(DATE_ADD(MAX(COALESCE(InvoiceDate,NOW()))< = MIN(COALESCE(InvoiceDate,NOW())),INTERVAL -30 DAY))有用. 事实上,当我奇怪地删除插入时,它可以工作. 选择不会返回任何内容但它仍然失败. 为什么是这样?任何人都可以帮忙找出原因吗?
解决方法:
第一种选择:
此警告可能是由SQL_MODE引起的.
根据mysql文档“如果启用了NO_ZERO_DATE或NO_ZERO_IN_DATE SQL模式,则不允许零日期或部分日期.”所以这可能是你的INSERT与’0000-00-00 00:00:00’失败的原因.
您可以通过执行以下命令来检查您的sql模式:
SELECT @@sql_mode;
如果设置了NO_ZERO_DATE或NO_ZERO_IN_DATE中的任何一个,那么您可以:
SET sql_mode = '';
第二种选择
另一个选择是由于STRICT_TRANS_TABLES模式而失败.
正如mysql文档所说:
Strict mode affects whether the server permits ‘0000-00-00’ as a valid
date: If strict mode is not enabled, ‘0000-00-00’ is permitted and
inserts produce no warning. If strict mode is enabled, ‘0000-00-00’ is
not permitted and inserts produce an error, unless IGNORE is given as
well. For INSERT IGNORE and UPDATE IGNORE, ‘0000-00-00’ is permitted
and inserts produce a warning
这对于datetime也是有效的.
因此,您必须禁用STRICT MODE或禁用它不是一个选项 – 修改查询,使其不返回无效的日期/日期时间结果
内容总结
以上是互联网集市为您收集整理的mysql – 不正确的DateTime值’0000-00-00 00:00:00′ – Date_Sub()in Having全部内容,希望文章能够帮你解决mysql – 不正确的DateTime值’0000-00-00 00:00:00′ – Date_Sub()in Having所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。