Der beste Weg, den Zeitabschnitt eines Datum-Feld abzustreifen und wird unter Verwendung von datediff dateadd Funktionen.
DateAdd(day, datediff(day,0, MydateValue), 0)
Dies geschieht AdvantEdge der Tatsache , dass SQL Server speichert als zwei ganzen Zahlen geht, man die Anzahl der Tage seit dem Tag entspricht „0“ - (1. Januar 1900), und die zweite , die die Anzahl von repräsentiert Zecken (jede Zecke ist etwa 3,33 ms seit Mitternacht) (für die Zeit) *.
Die obige Formel muss einfach nur die erste Ganzzahl gelesen. Es gibt keine Umwandlung oder Verarbeitung erforderlich ist, so ist es extrem schnell.
Um Ihre Fragen verwenden, um einen Index zu machen ... Mit dieser Formel auf dem Eingangsfilterparameter ersten oder auf der „anderen“ Seite des Gleichheitszeichens aus dem Tabelle Datum Zeitfeld, so dass der Abfrageoptimierer die Berechnung nicht ausgeführt hat auf jedem Datetime-Feld in der Tabelle, um zu bestimmen, welche Zeilen das Filterprädikat erfüllen. Das macht Ihr Suchargument "SARG-able" (Search argument)
Where MyDateTimeColumn > DateAdd(day,
datediff(day,0, @MydateParameter), 0) -- SARG-able
eher, als
Where DateAdd(day, datediff(day,0,
MyDateTimeColumn ), 0) > @MydateParameter -- Not SARG-able
* HINWEIS. Intern wird die zweite ganze Zahl ist (die Zeitrang) speichert Zecken. In einem Tag sind 24 x 60 x 60 x 300 = 25.920.000 Ticks (serendipitously knapp unter dem Maximalwert eine 32-Bit-Ganzzahl halten kann). Allerdings brauchen Sie nicht zu kümmern, wenn arithmetisch ein Datetime Ändern ... Wenn Addieren oder Subtrahieren von Werten von Datetimes können Sie den Wert als Bruch zu behandeln, als wäre es genau gleich den Bruchteil eines Tages war, als ob die vollständige Datumzeit-Wert war eine Gleitkommazahl aus einem ganzzahligen Teil, der aus den Zeitpunkt darstellt, und den Bruchteil der Zeit darstellt). dh
`Declare @Dt DateTime Set @Dt = getdate()
Set @Dt = @Dt + 1.0/24 -- Adds one hour
Select @Dt
Set @Dt = @Dt - .25 -- Moves back 6 hours
Select @Dt`