sql >> Database teknologi >  >> RDS >> Sqlserver

Bedste tilgang til at fjerne tid en del af datetime i SQL Server

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)


  1. Hvordan sikkerhedskopierer man en postgresql-database fra psql?

  2. VIS TABELLER i MariaDB

  3. PostgreSQL forkert sortering

  4. Oprettelse af sammensat primær nøgle i SQL Server