2010-11-23 4 views
8

Meine Oracle-Tabelle hat eine Spalte tmstp mit dem TIMESTAMP(3) WITH TIME ZONE-Datentyp.Verwendung von BETWEEN oder <=, > = für Oracle-Zeitstempel

Wenn ich die folgende Abfrage ausführen

SELECT COUNT(column1) 
    FROM table1 
WHERE tmstp BETWEEN to_timestamp_tz('10-OCT-10 05.00.00.000000000 AM -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR') 
       AND to_timestamp_tz('11-OCT-10 04.59.59.999999999 AM -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR'); 

es gibt etwa die doppelte Zählung wie die folgende Abfrage:

SELECT COUNT(column1) 
    FROM table1 
WHERE tmstp >= to_timestamp_tz('10-OCT-10 05.00.00.000000000 AM -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR') 
    AND tmstp <= to_timestamp_tz('11-OCT-10 04.59.59.999999999 AM -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR'); 

Ich dachte, sie zu vergleichbaren Ergebnissen führen sollte. Irgendwelche Eingaben, was passieren könnte? Wie sollte ich das debuggen?

+1

welche Version von Oracle verwenden Sie? –

+0

Es ist 10g. Frage bearbeitet – Russell

+1

Nur ein Kommentar: Verwenden Sie stattdessen 'count (1)'; es ist viel schneller für Orakel. –

Antwort

6

Sorry für den Ärger. Ich habe es herausgefunden. Meine Frage ist auch fehlerhaft, weil ich sie bearbeitet habe, um vertrauliche Daten zu verbergen.

Zwischen dem AM- und dem Zeitzonen-Offset in einer der Abfragen gab es einen zusätzlichen Leerraum, der zu unterschiedlichen Ergebnissen führte.

Dumm mir.

Wenn also die Zeitstempel-Zeichenfolge, die konvertiert wird, mit Whitespaces etwas abweicht, sind die Antworten möglicherweise deaktiviert.

+1

+1 Ein Grund mehr, die eingebauten Konvertierungsroutinen nicht zu verwenden :-) –

+0

Ich kann das in 12.1.0.2 nicht reproduzieren. Dies könnte ein Fehler in 10g gewesen sein. –