TRUNC в SQL: синтаксис, варианты использования и тонкости применения
TRUNC - одна из важнейших функций в SQL для обработки и преобразования данных. В этой статье мы подробно рассмотрим синтаксис, варианты использования и тонкости применения TRUNC в различных СУБД.
Общие сведения о функции TRUNC
TRUNC (от англ. truncate - усекать) - это встроенная функция в SQL, которая позволяет усекать или округлять числовые и датовые значения в соответствии с заданными правилами. Рассмотрим подробнее ее основные особенности.
Определение и назначение TRUNC
Функция TRUNC усекает числовое или датовое значение до определенной точности, округляя его в меньшую сторону. Например, при усечении числа до целого отбрасывается дробная часть, а при усечении даты до месяца - день и время.
Основное отличие TRUNC от функции округления ROUND - результат всегда округляется в меньшую сторону, без дополнительных правил. Это позволяет использовать TRUNC для унификации и группировки данных в запросах.
Синтаксис функции TRUNC
Для чисел:
TRUNC(number, decimal_places)
Для дат:
TRUNC(date, format)
Где:
- number - числовое значение
- decimal_places - количество знаков после запятой
- date - дата
- format - формат усечения даты (День, Час и т.д.)
В каких СУБД поддерживается
Функция TRUNC реализована в большинстве популярных СУБД, включая Oracle, SQL Server, PostgreSQL, MySQL, SQLite и другие.
Синтаксис может немного отличаться, но базовая функциональность одинакова.
Пример использования TRUNC для чисел
Например, чтобы усечь число до 2 знаков после запятой:
TRUNC(3.14159, 2) = 3.14
Пример использования TRUNC для дат
Чтобы усечь дату до уровня месяца:
TRUNC(TO_DATE('2023-02-15 10:23:45', 'YYYY-MM-DD HH24:MI:SS'), 'MM') = '2023-02-01 00:00:00'
Как видно из примеров, TRUNC усекает значения строго в меньшую сторону без дополнительных правил округления.
TRUNC для работы с датами
Одно из основных применений TRUNC - это работа с датами и временем. Рассмотрим подробнее возможности функции.
Поддерживаемые форматы даты
С помощью параметра format в TRUNC можно указать требуемый уровень точности даты:
- Год - 'YYYY', 'YYY', 'YY', 'Y'
- Квартал - 'Q'
- Месяц - 'MONTH', 'MON', 'MM'
- Неделя - 'WW', 'IW'
- День - 'DDD', 'DD', 'J'
- Час - 'HH', 'HH12', 'HH24'
- Минута - 'MI'
Например:
TRUNC(date, 'YYYY') - год
TRUNC(date, 'MM') - месяц
TRUNC(date, 'DD') - день
Пример усечения даты до уровня месяца
Чтобы усечь дату до определенного уровня, например, до месяца, используем:
TRUNC(TO_DATE('2023-02-15 10:23:45', 'YYYY-MM-DD HH24:MI:SS'), 'MM')
Результат:
'2023-02-01 00:00:00'
День и время обнуляются, остается только год и месяц.
Комбинирование TRUNC и других функций даты
TRUNC можно комбинировать с другими функциями работы с датами, например:
ADD_MONTHS(TRUNC(date, 'MM'), 1)
- начало следующего месяца
Таким образом можно конструировать нужные диапазоны дат для отчетов и аналитики.
TRUNC для работы с числовыми данными
Помимо дат, TRUNC активно применяется для обработки числовых данных, в частности для округления до определенного количества знаков после запятой.
Усечение чисел до целых или с заданной точностью
Чтобы усечь число до целого, используем:
TRUNC(123.4567, 0) = 123
А чтобы оставить 2 знака после запятой:
TRUNC(123.4567, 2) = 123.45
Отрицательный параметр для усечения слева
Если указать отрицательное число десятичных разрядов, произойдет усечение слева от запятой:
TRUNC(123.4567, -1) = 120
Это позволяет округлить числа до десятков, сотен и т.д.
Пример усечения финансовых показателей
Например, чтобы округлить числа до миллионов рублей:
TRUNC(revenue, -6)
Для округления до тысяч:
TRUNC(expenses, -3)
Это упрощает работу с крупными числами в финансовых вычислениях и отчетах.
Комбинирование TRUNC и других функций
TRUNC можно комбинировать с другими математическими функциями, например:
POWER(TRUNC(value, 2), 3)
- возведение в куб усеченного значения
Это позволяет гибко преобразовывать числовые данные в SQL запросах.