Trunc (sysdate) в SQL Server

Что эквивалентно:

TRUNC(SYSDATE) 

... в SQL Server 2005?

Ответы

Ответ 1

Рекомендуемые:

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

Это еще одна альтернатива, но она опасна из-за того, что вы выбрали FLOAT. Было также продемонстрировано не масштабирование производительности, а также подход DATEADD/DATEDIFF.

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

Ответ 2

Другим вариантом является использование CONVERT (MSSQL 2008 и более поздних версий) и либо использовать соответствующий стиль, либо использовать стиль, который вы затем можете использовать SUBSTRING. Я понятия не имею о производительности по сравнению с решением dateadd/датичным решением.

например.

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

Возврат:

2012-01-03 15:30

Пример использования группы, в которой перечислены строки, созданные за минуту (предполагается, что "создан" столбец 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)