Hur får jag det aktuella datumet utan tidsdelen i SQL Server 2005? Jag har använt GETDATE() men vill att det ska ha en tid på 00: 00: 00.0

Svar

Det snabbaste om du måste iterera över en postuppsättning och inte har datum i SQL Server 2008

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

Två olika och utmärkta svar på StackOverflow visar detta: One , Two

Varchar-omvandlingar är ett av de värsta sätten att göra det. Naturligtvis, för ett värde spelar det ingen roll men det är en bra vana att komma in.

Detta sätt är också deterministiskt , säg om du vill indexera en beräknad kolumn. Även folk som skriver böcker om SQL Server får fångas upp med konvertering av datetime

Denna teknik kan också utökas.

  • igår: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • månadens början: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • slutet av förra månad: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • början av nästa månad: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Redigera :

Som jag nämnde om determinism är varchar-metoder inte säkra om du inte använder stil 112.

Andra svar här påpekar att du aldrig skulle använda detta på en kolumn. Detta är rätt, men du kanske vill välja 100k rader eller lägga till en beräknad kolumn eller GROUP BY-datum bara. Då måste du använda den här metoden.

Det andra svaret nämner också stil 110. Detta är inte språk eller SET DATEFORMAT säkert och misslyckas med ”brittisk” språkinställning. Se den ultimata guiden till datatypens datatyper av Tibor Karaszi.

Kommentarer

  • Tillhandahålls lin k är död.

Svar

Du måste konvertera det till varchar som anger ett formatmönster (110 i detta omvandla (eller kasta) tillbaka till datetime.

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *