Hvordan får jeg den aktuelle dato uden tidsdelen i SQL Server 2005? Jeg har brugt GETDATE()
men vil gerne have tiden 00: 00: 00.0
Svar
Den hurtigste hvis du skal gentage over et pladesæt og ikke har en dato i SQL Server 2008
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
To forskellige og fremragende svar på StackOverflow viser dette: One , Two
Varchar-konverteringer er en af de værste måder at gøre det på. For en værdi betyder det naturligvis ikke noget, men det er en god vane at komme ind.
Denne måde er også deterministisk , sig, hvis du vil indeksere en beregnet kolonne. Selv folk, der skriver bøger om SQL Server, bliver fanget af datetime-konverteringer
Denne teknik kan også udvides.
- i går:
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
- månedens start:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
- sidste sidste måned:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
- start på næste måned:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
Rediger :
Som jeg nævnte om determinisme, er varchar-metoder ikke sikre, medmindre du bruger stil 112.
Andre svar her påpeger, at du aldrig ville anvende dette på en kolonne. Dette er korrekt, men du vil måske vælge en 100k række eller tilføje en beregnet kolonne eller GROUP BY dato kun. Derefter skal du bruge denne metode.
Det andet svar nævner også stil 110. Dette er ikke sprog eller SET DATEFORMAT er sikker og mislykkes med “britisk” sprogindstilling. Se den ultimative guide til datetime-datatyper af Tibor Karaszi.
Kommentarer
- Forudsat lin k er død.
Svar
Du skal konvertere det til varchar, der angiver et formatmønster (110 i dette konvertere (eller kaste) derefter tilbage til datetime.
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)