Функции даты и времени для работы с объектами доменов

Любая функция, не относящаяся к числу специальных функций RQL, транслируется в SQL-запрос PostgreSQL. Таким образом, набор доступных функций определяется возможностями PostgreSQL. Ниже приведены функции, работа которых гарантированно поддерживается в RQL.

Ознакомиться с полным списком функций и их поведением можно в официальной документации PostgreSQL.

Обратите внимание, что для функций в официальной документации PostgreSQL может быть указана версия, в которой эти функции были введены. Это позволит определить, доступна ли рассматриваемая функция в вашей версии PostgreSQL.

Для получения текущих значений даты и времени используйте системные псевдонимы.

Извлечение компонентов даты и времени (DATE_PART())

Функция DATE_PART() используется для извлечения отдельных компонентов значения с типами данных Timestamp, Дата (Date) или Время (Time). Функция возвращает числовое значение соответствующего компонента.

Синтаксис
DATE_PART('<part>', <value>)

Здесь:

  • <part> — извлекаемый компонент даты или времени:

    • year — год;

    • month — месяц;

    • day — число месяца;

    • hour — часы;

    • minute — минуты;

    • second — секунды;

    • week — номер недели в году;

    • dow — номер дня недели;

    • doy — номер дня в году.

  • <value> — выражение с типом данных Timestamp, Date или Time.

Пример

Извлечение часа из текущей метки времени
condition: !rql |
    DATE_PART('hour', @CurrentTimestamp) >= 8 AND DATE_PART('hour', @CurrentDateTime) <= 18

Правило с этим условием применяется, если текущий час находится в диапазоне с 8 до 18.

Функции для работы с диапазонами времени

Функции работы с диапазонами времени используются для сравнения временных интервалов, заданных в атрибутах типа Временной промежуток (TimestampRange).

Создание диапазона времени (TSRANGE())

Функция TSRANGE() создает диапазон времени на основе заданных граничных значений.

Синтаксис использования функции
TSRANGE(<from>, <to> [, '<bounds>'])

Здесь:

  • <from> — начальное значение диапазона (дата или метка времени);

  • <to> — конечное значение диапазона (дата или метка времени);

  • <bounds> (необязательный) — аргумент, определяющий, необходимо ли включать в диапазон граничные значения:

    • [] — оба граничных значения включены (по умолчанию);

    • () — оба граничных значения исключены;

    • [) — включено только начало диапазона;

    • (] — включен только конец диапазона.

Примеры

Создание диапазона дат
condition: !rql birthDateRange IS NOT NULL AND birthDateRange = TSRANGE('2025-10-08', '2025-11-08')

В данном условии правило применяется, если значение атрибута birthDateRange находится в диапазоне с 8 октября 2025 года по 8 ноября 2025 года включительно.

Создание диапазона времени
condition: !rql birthDateRange IS NOT NULL
AND birthDateRange = TSRANGE('2025-10-08 21:00:00', '2025-11-08 21:00:00')

Данное RQL-выражение задает условие применения правила с точностью до секунд — если значение атрибута birthDateRange находится в диапазоне с 21:00:00 8 октября 2025 года до 21:00:00 8 ноября 2025 года включительно.

Явное указание границ диапазона
TSRANGE('2025-09-25', '2025-09-30', '()')

В этом случае обе границы диапазона исключены: диапазон не включает ни 25 сентября 2025 года, ни 30 сентября 2025 года.

Проверка нахождения диапазона раньше указанного значения (tsrangeBefore())

Функция tsrangeBefore() используется для проверки того, что диапазон времени полностью предшествует другому диапазону или конкретной дате. Функция возвращает True, если диапазон в первом аргументе заканчивается до значения во втором аргументе.

Синтаксис
tsrangeBefore(<range>, <control_time>)

Здесь:

  • <range> — проверяемый диапазон времени;

  • <compared_value> — диапазон времени или конкретная дата, с которой сравнивается диапазон.

Пример

Проверка нахождения до даты
condition: !rql tsrangeBefore(birthDateRange, '2025-10-02')

При данном условии правило применяется, если диапазон birthDateRange заканчивается до 2 октября 2025 года.

Проверка нахождения диапазона позже указанного значения (tsrangeAfter())

Функция tsrangeAfter() используется для проверки того, что диапазон времени начинается позже, чем заканчивается другой диапазон или наступила конкретная дата. Функция возвращает True, если диапазон в первом аргументе начинается после значения во втором аргументе.

Синтаксис
tsrangeAfter(<range>, <compared_value>)

Здесь:

  • <range> — проверяемый диапазон времени;

  • <compared_value> — диапазон времени или конкретная дата, с которой сравнивается диапазон.

Примеры

Проверка нахождения после даты
condition: !rql tsrangeAfter(birthDateRange, '2025-10-02')

При данном условии правило применяется, если диапазон birthDateRange начинается после 2 октября 2025 года.

Нахождение до текущей даты или после указанного диапазона
constraint: !rql tsrangeBefore(birthDateRange, @CurrentDate) OR tsrangeAfter(birthDateRange, TSRANGE('2025-09-25', '2025-09-30'))

При данном ограничении значение атрибута birthDateRange должно находиться до текущей даты или после диапазона с 25 по 30 сентября 2025 года.

Нахождения до текущей даты или после указанной даты
constraint: !rql tsrangeBefore(birthDateRange, @CurrentDate) OR tsrangeAfter(birthDateRange, '2025-09-25')

При данном ограничении значение атрибута birthDateRange должно находиться до текущей даты или после 25 сентября 2025 года.

Проверка включения в диапазон (tsrangeIncludes())

Функция tsrangeIncludes() используется для проверки того, что один диапазон полностью включен в другой.

Функция возвращает true, если значение первого аргумента полностью включает значение второго аргумента, то есть начало и конец второго диапазона находятся внутри первого диапазона.

Синтаксис
tsrangeIncludes(<external_range>, <included_range>)

Здесь:

  • <external_range> — диапазон времени или дата, которые должны включать второй аргумент;

  • <included_range> — диапазон времени или дата, которые должны быть включены.

Примеры

Проверка включения даты в диапазон
condition: !rql tsrangeIncludes(birthDateRange, @CurrentDate)

При данном условии правило применяется, если текущая дата находится внутри диапазона birthDateRange.

Проверка включения диапазона в диапазон
constraint: !rql tsrangeIncludes(birthDateRange, '2025-01-01') OR tsrangeIncludes(birthDateRange, TSRANGE('2025-04-01', '2025-05-01'))

При данном ограничении значение атрибута birthDateRange должно полностью включать 1 января 2025 года или диапазон с 1 апреля 2025 года по 1 мая 2025 года.

Проверка включения диапазона в диапазон
constraint: !rql tsrangeIncludes('2025-01-01', birthDateRange) OR tsrangeIncludes(TSRANGE('2025-04-01', '2025-05-01'), birthDateRange)

При данном ограничении значение атрибута birthDateRange должно полностью находиться внутри 1 января 2025 года или диапазона с 1 апреля 2025 года по 1 мая 2025 года.

Проверка пересечения диапазонов (tsrangeIntersects())

Функция tsrangeIntersects() применяется для проверки того, что два диапазона времени пересекаются. Функция возвращает true, если указанные диапазоны содержат хотя бы один общий момент времени.

Синтаксис
tsrangeIntersects(<дата или диапазон времени>, <дата или диапазон времени>)

Пример

Проверка пересечения с диапазоном
constraint: !rql tsrangeIntersects(birthDateRange, TSRANGE('2025-04-01', '2025-05-01'))

При данном ограничении значение атрибута birthDateRange должно пересекаться с диапазоном с 1 апреля 2025 года по 1 мая 2025 года хотя бы в одном моменте времени.

Вычисление длительности диапазона (tsrangeInterval())

Функция tsrangeInterval() используется для вычисления длины временного диапазона в заданных единицах измерения.

Синтаксис
tsrangeInterval(<range> [, '<unit>'])

Здесь:

  • <range> — диапазон времени;

  • <unit> (необязательный аргумент) — единица измерения времени:

    • minutes — минуты;

    • hours — часы;

    • days — дни (по умолчанию).

Пример

Проверка длины диапазона
condition: !rql tsrangeInterval(birthDateRange, 'days') < 7

Правило применяется, если длительность диапазона из атрибута birthDateRange составляет менее 7 дней.

Была ли полезна эта страница?

Обратная связь