Nach mehreren anderen Varianten habe ich heute endlich die vermutlich performanteste Routine zum Entfernen des Uhrzeit-Anteils aus einem MS SQL Server Datetime Ausdruck gefunden:
select DATEADD(dd,0,datediff(dd,0,GETDATE()))
Der Trick dabei ist, dass SQL Server die Zahl 0 als ein fixes Bezugsdatum interpretiert. Das Beispielstatement
select DATEADD(dd,0,0)
zeigt uns das interne Tag Null Referenzdatum 1. Januar 1900.
Die Datediff-Differenz zwischen diesem und dem aktuellen Datum sagt uns wieviele Tage seit dem 1. Januar 1990 vergangen sind. Addiert auf das Bezugsdatum 0 ergibt sich somit wieder das heutige Datum -- nur halt ohne Zeit.
Da nur Integer-Operationen genutzt werden statt komplexerer Umwandlungen ist diese Routine viel schneller als String-Format-Umwandlungen wie beispielsweise
select convert(datetime,convert(varchar(8),GETDATE(),112))
Es bietet sich an unsere Rechenroutine als Funktion anzulegen:
CREATE function [dbo].[getDateWithoutTime] (@mydate datetime)
returns datetime
as
begin
return DATEADD(dd,0,datediff(dd,0,@mydate))
end
Einfach genial ...
Und ab der Version 2008 gehts noch einfacher:
convert(datetime, convert(date,GETDATE()))
Kommentiert von: Manfred | 12. Mai 2011 um 14:41