Vergleichen Sie mal Teil des DateTime-Datentyp in SQL Server 2005

Wie kann ich Vergleiche nur die Zeit, die Teil eines DateTime-Datentyp in SQL Server 2005? Zum Beispiel, ich möchte alle Datensätze, in denen MyDateField ist nach einer bestimmten Zeit. Das folgende Beispiel ist ein sehr langer und wahrscheinlich nicht schnell Weg, dies zu tun.
Ich möchte Sie alle Termine, wo MyDateField größer als 12:30:50.400

SELECT *
FROM   Table1
WHERE      ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) = 50) AND (DATEPART(millisecond, MyDateField) > 400))
        OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) > 50))
        OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) > 30))
        OR ((DATEPART(hour, MyDateField) > 12))
  • Beachten Sie, dass wenn Sie tatsächlich verarbeiten müssen, die das Datum und die Uhrzeit getrennt, sind Sie effektiv brechen normalisierungsregeln. Ein DateTime-Wert einen bestimmten Punkt in der Zeit auf ein Datum. Ein Datum und die Zeit, die ein mehrwertiges Feld, das hättest aufgebrochen. Der Grund, warum Ihr code ausgeführt wird, langsam ist, dass Sie noch nicht normalisiert es richtig.
  • wie weit würden Sie diese? Sicherlich werden Sie nicht speichern: Tag, Monat, Jahr, Stunde, minute, Wochentag, Wochenende, Quartal, Woche in separaten Feldern, statt nur speichern Sie das Datum.
  • Natürlich könnte ich das separate ein DateTime-Feld in Felder für Datum und Uhrzeit. Aber dann hätte ich das gleiche problem zu vergleichen Datum und Uhrzeit zusammen.
  • Sie könnte leicht handhaben, dass der Vergleich mit einer berechneten Spalte, die Sie könnte anhalten und den index für die Leistung, wenn nötig. Daher Stimme ich mit Lasse.
Schreibe einen Kommentar