2016-04-22 8 views
-1

In meinem wählen Ich bin mit diesemOracle SQL-WHERE MONTH = N

(TRUNC(TO_DATE(TIMESTAMP, 'dd.mm.yyyyHH24:mi'))) TIMESTAMP, 

die folgende Ausgabe in einem Datumsformat zu erhalten: z 22/04/2016

Jetzt möchte ich eine Erklärung in meiner WHERE-Klausel hinzufügen nur Daten in speziellen Monaten zu zeigen, für Tage, nur als Beispiel, die im März und April sind

ich mit dieser versucht:

WHERE (TRUNC(TO_DATE(TIMESTAMP, 'mm'))) in (3,4) 

was mir einen Fehler gibt.

Danke für Ihre Hilfe.

+1

Normalerweise hilft es zu sagen, * was * Fehler Sie bekommen. 'TO_DATE (TIMESTAMP, ...)' konvertiert Ihren Zeitstempel mithilfe Ihrer NLS-Einstellungen in eine Zeichenfolge und versucht dann, diese Zeichenfolge zurück in ein Datum mit einer unangemessenen Maske zu konvertieren. Sie wollten wahrscheinlich 'TO_CHAR()' verwenden, aber dann wäre 'TRUNC()' auch nicht richtig. Ihr erster Ausdruck ist ebenfalls falsch, der sollte auch 'TO_CHAR()' verwenden. –

Antwort

1

In meinem wählen Ich bin mit diesem

(TRUNC(TO_DATE(TIMESTAMP, 'dd.mm.yyyyHH24:mi'))) TIMESTAMP, 

die folgende Ausgabe in einem Datumsformat zu erhalten: z 22/04/2016

TO_DATE nimmt einen String-Wert so Ihre "TIMESTAMP" Spalte implizit in einen String umgewandelt werden und dann zu einem Zeitpunkt zurück ..., die nicht notwendig ist (und stützt sich auf den Wert des NLS_TIMESTAMP_FORMAT Session-Parameter die implizite zu formatieren Konvertierung - die, wenn sie geändert wird, die Abfrage unterbricht; Sie können einfach tun:

TRUNC("TIMESTAMP") AS "TIMESTAMP" 

Wenn Sie dann auf verschiedenen Monaten filtern möchten, dann können Sie tun (wie von Tim Biegeleisen vorgeschlagen):

WHERE EXTRACT(MONTH FROM "TIMESTAMP") IN (3, 4) 

oder wenn Sie ein bestimmtes Jahr wollen dann

WHERE TRUNC("TIMESTAMP", 'MM') IN (DATE '2016-03-01', DATE '2016-04-01') 

oder, so können Sie einen Index für die Spalte verwenden:

WHERE "TIMESTAMP" >= DATE '2016-03-01' 
AND "TIMESTAMP" < DATE '2016-05-01' 
2

Verwenden Sie einfach EXTRACT() auf dem Zeitstempel:

WHERE EXTRACT(MONTH FROM timestamp) IN (3, 4) 

Dies würde Aufzeichnungen von März und April entspricht.