Функции даты и времени для работы с объектами доменов
|
Любая функция, не относящаяся к числу специальных функций 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 дней.
Была ли полезна эта страница?