Wie überprüfe ich nur die Zeit für Datetime-Felder, aber ignoriere das Datum?

7

Ich habe eine Spalte, die Daten im Datetime-Format speichert. Ich möchte nach allen Instanzen suchen, in denen der Zeitteil dieser Spalte nicht gleich 00: 00: 00: 000 ist - das Datum spielt keine Rolle.

Grundsätzlich, wenn time () eine Funktion ist, etwa so:

%Vor%

Wie gehe ich dabei vor?

    
Codingo 27.02.2013, 05:38
quelle

5 Antworten

9

Sie brauchen nur eine kleine Änderung an dem, was Sie bereits haben.

%Vor%

Verwenden Sie CONVERT , um DATETIME in TIME zu ändern.

%Vor%     
Mikael Eriksson 27.02.2013, 06:26
quelle
3

Eine andere Möglichkeit besteht darin, sie in einen anderen Datentyp umzuwandeln, zB

%Vor%
John Woo 27.02.2013 05:52
quelle
3

Verwenden Sie DATEDIFF und DATEADD , um stattdessen den Datumsteil der Datetime zu erhalten. Vergleichen Sie die Spalte nur mit dem Datum und es werden diejenigen Zeilen zurückgegeben, die eine Zeit ungleich Null haben.

Das funktioniert so, dass wir zunächst die Differenz (in Tagen) zwischen der Epoche und dem Wert berechnen. Wir fügen diese Nummer der Epoche hinzu, um eine neue Datetime zu erstellen. Da das Ergebnis von DATEDIFF eine ganze Zahl ist, wird jede Zeitkomponente abgerundet.

%Vor%

Die Zeitfunktion könnte dann folgendermaßen implementiert werden, nicht dass ich sie für dieses spezielle Szenario empfehle:

%Vor%

Bearbeiten: Wie in anderen Antworten erwähnt, können Sie in DATE umwandeln, um den gleichen Effekt wie in DATEADD(d, DATEDIFF(d, 0, DateColumn), 0) zu erzielen. DATE wurde jedoch nur in SQL Server 2008 hinzugefügt, während die Formel mindestens auf SQL 2000 zurückkompatibel ist. Wenn Sie also Abwärtskompatibilität benötigen oder mit SQL CE arbeiten, ist das Umwandeln in DATE nicht möglich.

    
Mitch 27.02.2013 05:46
quelle
2
%Vor%     
Ravindra Gullapalli 27.02.2013 05:48
quelle
2

Ich mache das die ganze Zeit, wenn ich versuche zu sehen, ob die Spalte einer Tabelle in ein Datum anstatt in eine Datetime umgewandelt werden soll, was wirklich die Antwort ist.

%Vor%

Die Besetzung entfernt die Zeit, und datetime hat eine höhere Priorität. Wenn sie also ungleich ist, hat sie einen Zeitwert. Das Gleiche könnte mit einer Besetzung zu Zeit, mit ein bisschen anderer Syntax getan werden.

    
jmoreno 27.02.2013 05:54
quelle

Tags und Links