Hoe krijg ik in SQL Server 2005 de huidige datum zonder het tijdsgedeelte? Ik heb GETDATE() gebruikt, maar zou graag een tijd van 00: 00: 00.0 willen hebben

Answer

De snelste als je een recordset moet herhalen en geen datum hebt in SQL Server 2008

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

Twee verschillende en uitstekende antwoorden op StackOverflow bevestigen dit: Een , Twee

Varchar-conversies zijn een van de slechtste manieren om het te doen. Natuurlijk maakt het voor één waarde misschien niet uit, maar het is een goede gewoonte om erin te komen.

Deze manier is ook deterministisch , zeg of u een berekende kolom wilt indexeren. Zelfs mensen die boeken over SQL Server schrijven, worden betrapt op datetime-conversies

Deze techniek is ook uitbreidbaar.

  • gisteren: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • begin van de maand: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • einde van laatste maand: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • begin volgende maand: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Bewerken :

Zoals ik al zei over determinisme, zijn varchar-methoden niet veilig tenzij je stijl 112 gebruikt.

Andere antwoorden hier wijzen erop dat je dit nooit op een kolom zou toepassen. correct, maar misschien wil je 100k rijen selecteren of een berekende kolom of GROUP BY alleen datum toevoegen. Dan moet je deze methode gebruiken.

Het andere antwoord noemt ook stijl 110. Dit is geen taal of SET DATEFORMAT is veilig en mislukt met “british” taalinstelling. Zie de ultieme gids voor de datetime datatypes door Tibor Karaszi.

Reacties

  • Verstrekte lin k is dood.

Answer

Je moet het converteren naar varchar en een formaatpatroon specificeren (110 in dit case) en converteer (of cast) vervolgens terug naar datetime.

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *