2009-11-11 12 views
13

Co jest odpowiednikiem:Trunc (sysdate) w SQL Server

TRUNC(SYSDATE) 

... w SQL Server 2005?

+3

30 pytań, żadnych odpowiedzi przyjęty? Po co się męczyć? – RRUZ

+2

Pytanie jest zgodne z prawem - OP chce odpowiednika funkcjonalności ORACLE. –

+0

Dziękuję, Dominic :) –

Odpowiedz

17

Zalecane:

DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 

Jest to kolejna alternatywa, ale jest to ryzykowne z powodu rzucania do pływaka. Wykazano również, że nie skaluje wydajności, a także podejścia DATEADD/DATEDIFF.

CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME) 
+5

Muszę zrobić wszystko, aby uzyskać TRUNC()? –

+0

Działa to, ale byłoby bardziej poprawne przełączanie 2. i 3. argumentów DATEADD. Drugim argumentem jest przyrost, więc dodajesz 0 do dni zwróconych przez DATEDIFF. – djs

1

Inną opcją jest użycie CONVERT (MSSQL 2008 i późniejsze) i użyć odpowiedni styl lub użyć stylu, że można wtedy podciąg. Nie mam pojęcia o wydajności w porównaniu do rozwiązania dateadd/datediff.

np.

SELECT SUBSTRING(CONVERT(nvarchar(30), GETDATE(), 120), 1, 16)

Zwraca:

2012-01-03 15:30

Przykład dla grupy, która zawiera listę rzędy utworzone na minutę (zakłada 'utworzony' kolumnę datetime):

SELECT SUBSTRING(CONVERT(nvarchar(30), created, 120), 1, 16) as [minute] 
, COUNT(1) as [per min] 
FROM foo 
GROUP BY SUBSTRING(CONVERT(nvarchar(30), created, 120), 1, 16) 
+2

Jeśli używasz programu SQL Server 2008 lub nowszego, po prostu użyj CONVERT (date, getdate()). Typ danych "Data" nie przechowuje informacji o czasie. – Baodad