wake-up-neo.com

Oracle SQL - DATE größer als Anweisung

Wie der Titel schon sagt, möchte ich eine Möglichkeit finden, per Abfrage zu überprüfen, welche meiner Datensätze seit SYSDATE die letzten 6 Monate zurückliegen.

SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';

Ich habe Folgendes versucht, aber es wird ein Fehler zurückgegeben, der besagt, dass mein Datumsformat falsch ist. Beim Einfügen der Daten habe ich jedoch dieses Datumsformat wie gewünscht/beabsichtigt verwendet und hatte keine Probleme.

Fehler in der Befehlszeile: 10 Spalte: 25

Blockquote

Fehlermeldung -

SQL-Fehler: ORA-01861: Literal stimmt nicht mit Formatzeichenfolge 01861 überein. 00000 - "Literal stimmt nicht mit Formatzeichenfolge überein"

* Ursache: Literale in der Eingabe müssen dieselbe Länge haben wie Literale in der Formatzeichenfolge (mit Ausnahme von führenden Leerzeichen). Wenn der Modifikator "FX" aktiviert ist, muss das Literal exakt und ohne zusätzliche Leerzeichen übereinstimmen.

* Aktion: Korrigieren Sie die Formatzeichenfolge entsprechend dem Literal.

41
user3521826

Da Ihre Abfragezeichenfolge ein Literal ist und Ihre Daten ordnungsgemäß als DATE gespeichert sind, sollten Sie Datumsliterale verwenden:

SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'

Wenn Sie TO_DATE (da Ihr Abfragewert beispielsweise kein Literal ist). Ich empfehle Ihnen, den Parameter NLS_DATE_LANGUAGE explizit festzulegen, wenn Sie US-abgekürzte Monatsnamen verwenden. Auf diese Weise kommt es bei einigen lokalisierten Oracle-Installationen nicht zum Absturz:

SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
                           'NLS_DATE_LANGUAGE = American');
52
Sylvain Leroux

Sie müssen die Zeichenfolge mit der Funktion to_date() in Datum konvertieren

SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');

OR

SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');

OR

SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');

Dies funktioniert nur, wenn OrderDate in Date format Gespeichert ist. Wenn es sich um Varchar handelt, sollten Sie to_date() func auf diese Spalte anwenden

 SELECT * FROM OrderArchive
    WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');
28
Sachu

sie müssen die To_Date () - Funktion verwenden, um die Zeichenfolge in Datum zu konvertieren! http://www.techonthenet.com/Oracle/functions/to_date.php

1
kamokaze