Hvordan får jeg den nåværende datoen uten tidsdelen i SQL Server 2005? Jeg har brukt GETDATE() men ønsker at det skal ha tiden 00: 00: 00.0

Svar

Den raskeste hvis du må gjenta over et platesett og ikke har dato i SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 

To forskjellige og gode svar på StackOverflow viser dette: One , Two

Varchar-konverteringer er en av de verste måtene å gjøre det på. For en verdi kan det ikke ha noe å si, men det er en god vane å komme inn.

Denne måten er også deterministisk , si hvis du vil indeksere en beregnet kolonne. Selv folk som skriver bøker om SQL Server, blir fanget opp med datetime-konverteringer

Denne teknikken kan også utvides.

  • i går: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • begynnelsen av måneden: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • slutten av forrige måned: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • begynnelsen av neste måned: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Rediger :

Som jeg nevnte om determinisme, varchar-metoder er ikke trygge med mindre du bruker stil 112.

Andre svar her påpeker at du aldri ville brukt dette på en kolonne. Dette er riktig, men det kan være lurt å velge en 100 000 rad eller legge til en beregnet kolonne eller GROUP BY dato bare. Da må du bruke denne metoden.

Det andre svaret nevner også stil 110. Dette er ikke språk eller SET DATEFORMAT trygt og mislykkes med «britisk» språkinnstilling. Se den ultimate guiden til datetime datatypes av Tibor Karaszi.

Kommentarer

  • Forutsatt lin k er død.

Svar

Du må konvertere det til varchar som angir et formatmønster (110 i dette konvertere (eller kaste) tilbake til datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime) 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *