Strengt taget metode a
er den mindst ressourcekrævende:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Bevist mindre CPU-intensiv i samme samlede varighed en million rækker af en person med alt for meget tid på hånden:Den mest effektive måde i SQL Server at få en dato fra dato+tid?
Jeg så en lignende test andre steder med lignende resultater.
Jeg foretrækker DATEADD/DATEDIFF fordi:
- varchar er underlagt sprog-/datoformatproblemer
Eksempel:Hvorfor er mit CASE-udtryk ikke-deterministisk? - float er afhængig af intern lagring
- det udvides til at træne den første dag i måneden, i morgen osv. ved at ændre "0"-basen
Rediger, okt. 2011
For SQL Server 2008+ kan du CAST til date
dvs. CAST(getdate() AS date)
. Eller brug bare date
datatype så ingen time
at fjerne.
Rediger, jan. 2012
Et fungerende eksempel på, hvor fleksibelt dette er:Behov for at beregne efter afrundet klokkeslæt eller datotal i sql-server
Rediger, maj 2012
Brug ikke dette i WHERE-sætninger og lignende uden at tænke:Tilføjelse af en funktion eller CAST til en kolonne ugyldiggør indeksbrug. Se nummer 2 her Almindelige SQL-programmeringsfejl
Nu har dette et eksempel på senere SQL Server-optimeringsversioner, der administrerer CAST til dato korrekt, men generelt det vil være en dårlig idé ...
Rediger, sep. 2018, for 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)