În SQL Server 2005 cum obțin data curentă fără partea de timp? Am folosit GETDATE()
, dar aș dori să aibă un timp de 00: 00: 00.0
Răspuns
Cel cel mai rapid dacă trebuie să iterați pe un set de înregistrări și să nu aveți o dată în SQL Server 2008
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Două răspunsuri diferite și excelente pe StackOverflow confirmă acest lucru: Unu , Două
Conversiile Varchar sunt una dintre cele mai proaste modalități de a face acest lucru. Desigur, pentru o valoare poate să nu conteze, dar „este un obicei bun de a intra.
Acest mod este, de asemenea, determinist. , spuneți dacă doriți să indexați o coloană calculată. Chiar și persoanele care scriu cărți despre SQL Server primesc prin conversii datetime
Această tehnică este, de asemenea, extensibilă.
- ieri:
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
- începutul lunii:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
- sfârșitul ultimului lună:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
- începutul lunii viitoare:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
Editați :
După cum am menționat despre determinism, metodele varchar nu sunt sigure, cu excepția cazului în care utilizați stilul 112.
Alte răspunsuri de aici indică faptul că nu veți aplica niciodată acest lucru unei coloane. corect, dar poate doriți să selectați un rând de 100k sau să adăugați o coloană calculată sau o dată GROUP BY. Apoi trebuie să utilizați această metodă.
Celălalt răspuns menționează și stilul 110. Aceasta nu este limbă sau SET DATEFORMAT este sigur și eșuează cu setarea limbii „britanice”. Consultați ghidul final pentru tipurile de date datetime de Tibor Karaszi.
Comentarii
- Furnizat lin k este mort.
Răspuns
Trebuie să-l convertiți în varchar specificând un model de format (110 în acest case) apoi convertiți (sau distribuiți) înapoi la datetime.
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)