Kuinka saan nykyisen päivämäärän ilman aikaosaa SQL Server 2005: ssä? Olen käyttänyt GETDATE(), mutta haluaisin, että sen kellonaika on 00: 00: 00.0

Vastaa

nopein jos joudut toistamaan tietuejoukon ja sinulla ei ole päivämäärää SQL Server 2008: ssa

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

Kaksi erilaista ja erinomaista StackOverflow-vastausta tukee tätä: Yksi , Kaksi

Varchar-konversiot ovat yksi pahimmista tavoista tehdä se. Tietysti yhdellä arvolla ei välttämättä ole väliä, mutta siihen on hyvä tapa päästä.

Tämä tapa on myös deterministinen , sano jos haluat indeksoida lasketun sarakkeen. Jopa SQL Serveristä kirjoja kirjoittavat ihmiset saavat kiinni päivämäärän muunnoksista

Tämä tekniikka on myös laajennettavissa.

  • eilen: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • kuukauden alku: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • viimeisen loppu kuukausi: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • ensi kuun alku: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Muokkaa :

Kuten mainitsin determinismistä, varchar-menetelmät eivät ole turvallisia, ellet käytä tyyliä 112.

Muut vastaukset huomauttavat, että et koskaan käyttänyt tätä sarakkeeseen. Tämä on oikein, mutta voit halutessasi valita 100 kt riviä tai lisätä lasketun sarakkeen tai GROUP BY -päivämäärän vain. Sitten sinun on käytettävä tätä tapaa.

Toisessa vastauksessa mainitaan myös tyyli 110. Tämä ei ole kieli tai SET DATEFORMAT on turvallinen ja epäonnistuu ”brittiläisen” kieliasetuksen avulla. Katso Tibor Karaszin lopullinen opas päivämäärätyyppisiin tietotyyppeihin. >

  • Annettu linja k on kuollut.

Vastaa

Sinun on muunnettava se varchariksi, joka määrittää muotoilumallin (tässä 110 Muunna (tai suoratoista) sitten takaisin päivämääräksi.

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *