2008-11-18 4 views
6

Ich versuche, eine funktionierende MS Access-Abfrage auf eine Oracle-Datenbank zu konvertieren, auf die über VB-Skript (ASP) zugegriffen wird. Dies ist der letzte Abschnitt der WHERE-Klausel:Einfache Oracle SQL-Datumssyntax Frage

sql = sql & "WHERE (UAT.HB.MB_MODE = 'A' AND UAT.HB.PRINT_DATE >= '" 
& SD & "' AND UAT.HB.PRINT_DATE <= '" & ED &"' )" 

Die Variablen „SD“ (das heißt „Startdatum“) ist eine Textzeichenfolge, die einen Wert wie „11/11/2008“ enthalten. Dasselbe gilt für die Variable "ED" (d. H. "Enddatum").

Die Daten funktionieren jedoch nicht. Benötigt Oracle eine spezielle Möglichkeit, Daten zu verwenden?

Müssen die Daten konvertiert werden? Umgeben Sie sie mit dem Schlüsselwort "#" wie in MS Access?

Antwort

-1

Das Standard-Datumsformat für Oracle ist "dd-mon-yy". Sie können eine TO_CHAR-Funktion für das Datumsfeld verwenden, um sie in ein Format zu konvertieren, für das Sie eine Übereinstimmung bevorzugen.

+0

die NLS_DATE_FORMAT, die das Standardformat für implizites Zeichenfolge Datum und Datum String steuert werfen, hängt von dem Client-Gebietsschema. Wenn Sie einen europäischen Client-PC haben, ändert sich das Standardformat. Da die Clienteinstellung die Datenbankeinstellung außer Kraft setzt, kann der Code möglicherweise fehlschlagen. –

+0

Verlassen Sie sich nie auf Standardwerte. –

+0

absolut. Gute Argumente. –

15

In Oracle, Ihr Datum sollte als ANSI-Datum geschrieben werden diese wörtliche wie:

DATE '2008-11-11' 

Oder von einer Zeichenfolge wie folgt in ein Datum konvertiert:

TO_DATE('11/11/2008', 'MM/DD/YYYY') 

here Siehe

+0

Sie müssen vorsichtig sein, wenn Sie ein <= an einem solchen Datum machen. Sie werden einen hinzufügen wollen. –

1

nach this können Sie Folgendes verwenden:

to_date('19960725','YYYYMMDD') 
8

Gehen Sie nicht davon aus, dass das Standard-Datumsformat von Oracle nichts ist. Überprüfen Sie die NLS_DATE_FORMAT oder verwenden Sie TO_DATE, um es zu konvertieren. Gefällt mir:

TO_DATE('2008-11-18 14:13:59', 'YYYY-MM-DD HH24:Mi:SS') 

Beachten Sie die 'Mi' für die Minuten und nicht 'MM'. Das fängt viele Leute an.

+0

Ich nehme an, du meintest MI für Minuten nicht MM (was für den Monat wäre). –

+0

Ich habe das nicht bemerkt, ich habe es korrigiert. Vielen Dank! – gpojd

0

Hier ein paar Beispiele für zu konvertieren und von Terminen:

  • select to_date('2008/11/18:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam') from dual
  • select to_char(sysdate, 'mm/dd/yyyy') from dual
0

Das Standard-Oracle-Datumsformat kann von einer Datenbank zum nächsten ändern. Wenn Sie also das von Ihrer Datenbank verwendete Datumsformat nicht kennen, sollten Sie die Funktion TO_DATE mit einer expliziten Datumsformatzeichenfolge verwenden. Angesichts der Tatsache, dass sich das Standard-Datumsformat jederzeit ändern kann, ist die Verwendung eines expliziten Datumsformatzeichens ohnehin das Beste.

ex: TO_DATE ('11/11/2008 17.30' , 'MM/DD/YYYY HH24: MI')

0

Vergessen Sie nicht, dass das Datum eine Zeit (standardmäßig 00 enthält:
gegeben drei Termine, start_date, print_date, end_date, alle auf die gleichen Tagen
print_date >= start_date AND print_date <= end_date schlagen fehl, weil print_date war größer als end_date:.00), so
tun bekommen von so etwas wie diese nicht ertappt start_date war 2008-11-19 (00:00:00)
und end_date 2008-11-19 (00:00:00)
und print_date war 2008-11-19 (16:00:00 war)