2017-06-26 2 views
1
Select 
    (*) 
From 
    MISC 
WHERE 
    TO_DATE(TRANSACTION_TIME, YYYY-MM-DD HH24:MI:SS.FF6) Between 
    TO_DATE(:Variable1, 'YYYYMMDD') and TO_DATE(:Variable2, 'YYYYMMDD') 

Die Transaktionszeitspalte ist CHAR (78) und gibt 2017-06-12-12.35.37.444978 as und Beispiel zurück. Ich habe jetzt eine Weile mit diesem Problem gekämpft und eine Vielzahl von Fehlern bekommen. Mit dem aktuellen Setup erhalte ichDatum Format Fehler

Fehler beim Ausführen der Abfrage: ORA-01821: Datumsformat nicht erkannt.

Variable1 = 20170612
Variable2 = 20170615

+0

Aber Ihr angegebenes Format unterscheidet sich vom tatsächlichen Format? Wie haben Sie erwartet, dass es funktioniert? – HoneyBadger

+1

Ihr erstes 'TO_DATE' a) scheint nicht mit dem Format übereinzustimmen, und b) steht nicht in Anführungszeichen. Ich würde vorschlagen, dass, bevor Sie anfangen, den BETWEEN-Teil zu arbeiten, sich auf den 'TO_DATE'-Teil für die' TRANSACTION_TIME' konzentrieren. –

+0

Der Datentyp 'DATUM' unterstützt keine Sekundenbruchteile. Verwenden Sie 'TIMESTAMP' wie bereits von APC vorgeschlagen. –

Antwort

0

, dass ein Zeitstempel ist nicht ein Datum, so dass Sie to_timestamp() nicht to_date()

0

verwenden müssen, wenn Sie nur an dem Datum suchen, dann vielleicht eine einfachere Version funktioniert:

WHERE TO_DATE(SUBSTR(TRANSACTION_TIME, 10), 'YYYY-MM-DD') Between 
      TO_DATE(:Variable1, 'YYYYMMDD') and TO_DATE(:Variable2, 'YYYYMMDD') 

Auch, warum nicht die Variablen als Daten statt Strings übergeben? Das würde um die zweite Umwandlung herumkommen. Wenn es sich tatsächlich um Daten handelt, könnte das das Konvertierungsproblem sein.

+0

Das 'YYYY-MM-DD' in der ersten Zeile sollte in einfachen Anführungszeichen stehen ...? – mathguy