Strikt, metod a
är den minst resurskrävande:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Bevisat mindre CPU-intensiv för samma totala varaktighet en miljon rader av någon med alldeles för mycket tid på sina händer:Det effektivaste sättet i SQL Server att få ett datum från datum+tid?
Jag såg ett liknande test någon annanstans med liknande resultat också.
Jag föredrar DATEADD/DATEDIFF eftersom:
- varchar är föremål för språk-/datumformatproblem
Exempel:Varför är mitt CASE-uttryck icke-deterministiskt? - float är beroende av intern lagring
- det utökas till att träna första dagen i månaden, imorgon osv genom att ändra "0"-bas
Redigera, okt 2011
För SQL Server 2008+ kan du CAST till date
dvs. CAST(getdate() AS date)
. Eller använd bara date
datatyp så ingen time
att ta bort.
Redigera, jan 2012
Ett fungerande exempel på hur flexibelt detta är:Behov av att beräkna efter avrundad tid eller datumsiffra i sql-server
Redigera, maj 2012
Använd inte detta i WHERE-satser och liknande utan att tänka:att lägga till en funktion eller CAST i en kolumn ogiltigförklarar indexanvändningen. Se nummer 2 här Vanliga SQL-programmeringsmisstag
Nu har den här ett exempel på senare versioner av SQL Server-optimerare som hanterar CAST till dags dato korrekt, men allmänt det kommer att vara en dålig idé ...
Redigera, sep 2018, för datetime2
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)