2016-12-05 1 views
0

Was ich versuche zu erreichen, ist 1 Monat von Benutzer angegebenen Datumsvariablen zu subtrahieren. Mein Code in denen die Bedingungen ist wie folgt:ORACLE Subtraktion von benutzerdefinierten Variable

CONDITION >= to_char(add_months('&datum_od', 1), 'dd.mm.yyyy') 

Ich erhalte "ORA-1843: kein gültiger Monat" Fehler.

Könnt ihr mir bitte hier helfen?

+2

Die Bedingung macht keinen Sinn –

+0

Welchen Wert verwenden bieten Sie für & datum_od? –

+1

Was ist der Typ von 'BEDINGUNG'? Wenn es ein Datum ist, müssen Sie das 'to_char' entfernen und wenn es ein Varchar ist, vergleichen Sie Daten, die sie als Strings behandeln, und dies wird wahrscheinlich zu einem falschen Ergebnis führen. Außerdem akzeptiert 'add_months' ein Datum, während Sie ihm eine Zeichenfolge übergeben: Sie sollten ein' to_date' hinzufügen, um die Eingabe in einem Datum zu transformieren, indem Sie das entsprechende Format verwenden. Auch wenn Sie subtrahieren möchten, benötigen Sie wahrscheinlich -1 in 'add_months' – Aleksej

Antwort

1
to_date(CONDITION,'dd.mm.yyyy') >= add_months(to_date('&datum_od','dd.mm.yyyy'), -1) 

Bitte beachten Sie

  • Wenn die Daten als Strings gespeichert sind (warum?) Das Format YYYY, MM und DD in dieser Reihenfolge, beispiels enthalten sollte. 'YYYY-MM-DD', 'YYYYMMDD' usw.
  • für die Subtraktion Sie -1
+0

Danke Dudu, das hat mir sehr geholfen – xcelm

1

Fehler schlagen vor, dass Sie falsches Datumsformat haben. Wahrscheinlich verursacht durch &datum_od ist in anderem Format als NLS-Datum.

Versuchen:

CONDITION >= to_char(add_months(to_date(&datum_od,'yyyy-mm-dd'), 1), 'dd.mm.yyyy') 

Und Ihre Variable &datum_od im Format angegeben geben.

Das nächste, warum tun Sie >= Vergleich auf Strings nicht auf Daten? To_char scheint hier falsch.