ora-01841 volle Jahr muss zwischen 4713 und 9999 und nicht 0
Ich habe auf einer Abfrage, die machen mich verrückt, weil ich konnte nicht scheinen, um zu verstehen, die Fehlermeldung: mein query ist:
SELECT MYTABLE." ID ",
NVL(max(TO_DATE(TO_CHAR(ADD_MONTHS(MYTABLE." XISSU_DT " ,MYTABLE." XTNR "), 'DD/MM/YYYY'),'DD/MM/YYYY')), TO_DATE(SYSDATE , 'DD/MM/YYYY') ) MAXLASTINSDATE,
TO_DATE(SYSDATE , 'DD/MM/YYYY'),
(TO_CHAR (TO_DATE(SYSDATE , 'DD/MM/YYYY')
- TO_DATE(NVL(max(TO_DATE(TO_CHAR(ADD_MONTHS(MYTABLE." XISSU_DT " ,MYTABLE." XTNR "), 'DD/MM/YYYY'),'DD/MM/YYYY')), TO_DATE(SYSDATE , 'DD/MM/YYYY') ) , 'DD/MM/YYYY')) * -1) MaturityPeriod
FROM MYTABLE
where
MYTABLE." STATUS " = 'A'
group by MYTABLE." ID "
die Fehler, die ich bekomme, ist:
ora-01841 full year must be between 4713 and 9999 and not be 0
Ihre Hilfe wirklich zu schätzen!
sysdate
ist schon ein Datum! NichtTO_DATE(SYSDATE , 'DD/MM/YYYY')
, nur finden Sie es direkt. (Ich werde nicht mal Fragen, warum du Spaltennamen mit Leerzeichen, so....) Was ist Ihnen aktuelle NLS_DATE_FOIRMAT Einstellung?- Vielleicht mehr relevant, was ist der größte Wert, den Sie für
" XTNR "
. Wenn das"s sehr groß (vielleicht Zehntausende) dann könnte man wohl nur einstellen" XISSU_DT "
um ein ungültiges Datum. - Haben Sie wirklich Bezeichner mit führende und nachfolgende Leerzeichen? Aufruf Spalten Dinge wie
" ID "
ist der Wahnsinn.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TO_DATE(TO_CHAR(datevalue, 'DD/MM/YYYY'),'DD/MM/YYYY')
ist, entfernen Sie alle Komponenten, die effektiv das gleiche wie:TRUNC( datevalue )
.Dann
TO_DATE(SYSDATE , 'DD/MM/YYYY')
ist wahrscheinlich, wo dein Fehler liegt, wieTO_DATE( stringvalue, format_model )
nimmt einen string als erstes argument übergeben, so dass Sie effektiv zu tun:Macht es keinen Sinn als
SYSDATE
ist bereits derDATE
Daten geben, so dass Sie nicht brauchen, um verwendenTO_DATE
mit ihm.Schließlich
TO_CHAR(SYSDATE - datevalue)*-1
Warum sind Sie umwandeln in einen string, dann Multiplikation mit einer Zahl, wenn Sie tun können:Aber Sie brauchen noch nicht einmal den
*-1
wie Sie können, tauschen Sie Sie einfach die Begriffe um:Aufräumen es alle bis Sie etwas wie: