2017-06-20 2 views
0

Ich habe eine Tabelle, die eine Spalte mit Datentyp Datum hat.Datensätze ohne Zeitstempel

Daten wurden durch eine API im Format 'MM/TT/JJJJ HH12: MI: SS AM' von 2005 und irgendwo in den Jahren in 'MM/DD/YYYY' geändert, weiß nicht wann.

Jetzt muss ich herausfinden, wann dies begann. Wie separiere ich die Datensätze mit und ohne Zeitstempel in einer Abfrage?

P.S: Die Tabelle ist riesig, Millionen von Datensätzen, so dass das Holen aller Zeilen und Sortieren nicht hilft.

+2

Diese Aufzeichnungen * bis * haben eine Zeitkomponente Es ist gerade Mitternacht. Sie sollten also die Datensätze mit 'MM/DD/YYYY 00: 00: 00' betrachten. – HoneyBadger

+0

möglicherweise als Zeichenfolge umgewandelt, und wählen Sie dann min (Zeitstempel), wo Länge (Cast (Zeitstempel als String) <= 10 oder was auch immer ist die Länge von MM/TT/JJJJ – MiloBellano

+1

@MiloBellano Ein 'DATE' Datentyp ** immer ** hat Sowohl Datums- als auch Zeitkomponenten - Wenn ein Wert nur als Komponenten für das Jahr verwendet wird, wird die Stunde bis Sekunde standardmäßig auf Mitternacht ('00: 00: 00') gesetzt. Wenn das Datum in eine Zeichenfolge umgewandelt wird, wird nur ein impliziter Aufruf ausgeführt zu 'TO_CHAR' mit dem Session-Parameter' NLS_DATE_FORMAT' als Formatmodell - und das alle Datumsangaben identisch formatiert, unabhängig davon, ob die Zeitkomponente Mitternacht ist oder nicht – MT0

Antwort

3

Die trunc (date) -Funktion entfernt den Zeitteil eines Datums. Bei Sätzen mit einer Zeit trunc (Datum) <> Datum und bei Sätzen ohne Zeit trunc (Datum) = Datum.

select * 
from your_table 
where trunc(date_column)=date_column; 

edit:

Um Missverständnissen wegzunehmen

to_date('21-07-2017','DD-MM-YYYY') 

gleich

to_date('21-07-2017 00:00:00','DD-MM-YYYY HH24:MI:SS') 

gleich

trunc(to_date('21-07-2017 09:20:43','DD-MM-YYYY HH24:MI:SS')) 

In meinen Worten ein Datum ohne Zeit bedeutet ein Datum ohne Zeit

angegeben
to_date('21-07-2017','DD-MM-YYYY') 
+0

Alle Datensätze haben eine Zeit - es sind nur einige davon sind immer um Mitternacht – MT0

+0

Das wird immer noch funktionieren – Rene

+0

@Rene, ich denke, MT0's Kommentar bezieht sich auf Ihre * Erklärung * nicht Ihre vorgeschlagene Frage.Es ist möglicherweise irreführend zu sagen "Aufzeichnungen mit einer Zeit" und "r ohne Zeit ". –

4

Dies wird das letzte Datum finden, die nicht um Mitternacht ist:

SELECT MAX(
     CASE 
      WHEN your_column > TRUNC(your_column) 
      THEN your_column 
     END 
     ) 
FROM your_table 
Verwandte Themen