Az SQL Server 2005-ben hogyan kaphatom meg az aktuális dátumot az időrész nélkül? A GETDATE() -t használtam, de szeretném, ha 00: 00: 00.0 idő lenne

Válasz

A leggyorsabb ha meg kell ismételni egy rekordkészletet, és nincs dátum az SQL Server 2008-ban

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

A StackOverflow két különböző és kiváló válasza ezt igazolja: Egy , Kettő

A Varchar-konverziók az egyik legrosszabb módja ennek. Természetesen egy érték szempontjából ez nem mindegy, de jó szokás a belépés.

Ez a módszer is meghatározó , mondjuk, ha indexelni akar egy számított oszlopot. Még az SQL Serverről könyveket író nép is elkapja a dátumidő-konverziókat

Ez a technika is bővíthető.

  • tegnap: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • hónap kezdete: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • az utolsó vége hónap: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • a következő hónap eleje: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Szerkesztés :

Mint már említettem a determinizmusról, a varchar módszerek nem biztonságosak, hacsak nem használod a 112. stílust.

Más válaszok itt rámutatnak, hogy ezt soha nem alkalmaznád egy oszlopra. Ez helyes, de érdemes 100 ezer sort kiválasztani, vagy csak egy dátumot hozzáadni egy kiszámított oszlophoz vagy a GROUP BY-hez. Akkor ezt a módszert kell használnia.

A másik válasz a 110-es stílust is megemlíti. Ez nem nyelv vagy SET A DATEFORMAT biztonságos és sikertelen a “brit” nyelv beállításával. Lásd Karaszi Tibor végső útmutatóját a dátumidő adattípusokról. >

  • Megadott lin k halott.

Válasz

Meg kell konvertálni varchar-ba, megadva egy formátummintát (ebben 110 eset), majd konvertáljon (vagy öntsön) vissza datetime-ra.

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük