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)