Falsche DateTime-Wert '0000-00-00 00:00:00' - Date_Sub() in
So, ich habe eine einfügen, die wie folgt aussieht:
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;
Dauert es eine Tabelle, führt einige Berechnungen, Verknüpfungen auf sich und fügt dann an. Er scheiterte mit dieser Meldung: Incorrect DateTime Value '0000-00-00 00:00:00'
. Ich habe verengt es nach unten und wenn ich entfernen Sie diese Zeile aus der having-Klausel (DATE_ADD(MAX(COALESCE(InvoiceDate, NOW())) <= MIN(COALESCE(InvoiceDate, NOW())), INTERVAL -30 DAY))
es funktioniert.
In der Tat, es funktioniert, wenn ich die Einfüge seltsam.
Wählen Sie die nichts zurückgibt, aber es immer noch nicht.
Warum ist das so? Kann mir jemand helfen, herauszufinden warum?
Also, wenn Sie führen Sie einfach die SELECT-Teil der Abfrage dann erhalten Sie Ergebnisse zurück, ohne Fehler?
Ja, das ist der Fall
Und wenn Sie entfernen, die DATE_ADD-Zeile aus der HAVING-Klausel, dann hat die ganze INSERT funktioniert?
Wieder, das ist der Fall
Ja, das ist der Fall
Und wenn Sie entfernen, die DATE_ADD-Zeile aus der HAVING-Klausel, dann hat die ganze INSERT funktioniert?
Wieder, das ist der Fall
InformationsquelleAutor Andrew Kilburn | 2016-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste option:
Diese Warnung wohl sein könnte aufgrund der
SQL_MODE
.Laut mysql-Dokumentation "Wenn die NO_ZERO_DATE oder NO_ZERO_IN_DATE SQL-Modus aktiviert ist, werden null-Daten oder ein Teil der Daten nicht zulässig sind.". Dies könnte also die Ursache Ihrer
INSERT
mit '0000-00-00 00:00:00" schlägt fehl.Können Sie Ihre sql-Modus durch ausführen dieser:
und wenn einer der
NO_ZERO_DATE
oderNO_ZERO_IN_DATE
gesetzt sind, dann kann man nur:Zweite option
Die andere option ist, Sie ist fehlerhaft, weil der
STRICT_TRANS_TABLES
- Modus.Als mysql-Dokumentation sagen:
Gleiches gilt für datetime.
So müssen Sie entweder deaktivieren Sie den STRIKTEN MODUS ODER wenn es zu deaktivieren ist keine option - die Abfrage ändern, so dass es nicht ungültige Datum/datetime-Ergebnis
und was ist der Typ der die fehlerhafte Spalte ?
Es ist ein datetime
Es ist wegen der strikten Modus. Versuchen Sie, es zu deaktivieren ... oder, wenn es nicht eine option, die Abfrage ändern, so dass es nicht ungültige Datum/datetime-Ergebnis.
Sie da real MVP bro. Ich verwendet, legen Sie ignorieren. Danke!!!
InformationsquelleAutor krasipenkov
Setzen Sie diesen code vor der Abfrage
bzw.
gehen Sie zu
/etc/mysql/my.cnf
& kommentierenSTRICT_TRANS_TABLES
nützlicher Hinweis SQL-STRICT-MODUS
InformationsquelleAutor AZinkey