Время прочтения: 2 мин.

При постоянно увеличивающихся потоках данных обрабатываемой информации одним из важных классификаторов в обработке данных является значение даты и времени. Для вычисления необходимой даты для поиска, например, первого числа предыдущего квартала, последнего числа следующего квартала и т.д., обычно используется несколько функций: CONVERT(), DATEADD(), DATEDIFF(). В версии SQL Server 2022 появилась функция DATETRUNC (), которая помогает легко реализовать этот сценарий выборки необходимой даты, используя меньшее количество функций, и соответственно, сократить время получения необходимого результата.

Для того, чтобы использовать функцию DATETRUNC() необходимо предварительно настроить параметр уровня совместимости Вашей БД со значением 160, или выше как указано ниже:

ALTER DATABASE tempdb SET COMPATIBILITY_LEVEL = 160

DATETRUNC() – это функция, используемая для округления или усечения временной метки до нужного Вам интервала, т.е. сокращает временные метки, чтобы их было легче читать.

Синтаксис DATETRUNC (datepart, date) где datepart – определяет желаемый уровень точности (округляем до одной из этих единиц — year, quarter, month, dayofyear, day, week, iso_week, hour, minute, second, millisecond, microsecond), date – это столбец БД который содержит временную метку, которую мы хотим округлить, может принимать любое выражение, которое имеет допустимые типы даты или времени (smalldatetime, datetime, date, time, datetime2, datetimeoffset). Возвращаемый тип данных для DATETRUNC того же типа, что и на входе. Например, если на входе предоставлена дата datetimeoffset(3) то DATETRUNC вернет datetimeoffset(3) и т.д.

В таблице проведен сравнительный анализ с примерами решения задач используя традиционный метод (в решении используется три функции) и с использованием функции DATETRUNC (в решении используются две функции):

Как видно из представленных примеров использования функции DATETRUNC() для поиска необходимого значения даты в массиве данных на заданных промежутках, упрощается за счет использования только двух функций по сравнению с выполнением аналогичной задачи традиционным способом. Использование вышеупомянутой функции уменьшает время выполнения запросов на выборку и сокращает время получения необходимого результата при обработке 1000 записей на 1 ms.