Операторы сравнения (=, >, <, ...)
Операторы сравнения создают свойства, возвращаемым значением которых является результат операции сравнения. Значения созданных свойств принадлежат встроенному классу BOOLEAN.
В платформе на данный момент поддерживаются следующие операторы сравнения:
| Оператор | Название | Описание | Пример | Результат |
|---|---|---|---|---|
= или == | Равенство | Принимает два операнда на вход, возвращает TRUE, если операнды равны | 5 = 5 или 5 == 5 | TRUE |
!= | Неравенство | Принимает два операнда на вход, возвращает TRUE, если операнды не равны | 3 != 5 | TRUE |
>, < | Строгое сравнение | Принимают два операнда на вход, возвращают TRUE, если условие строгого сравнения выполняется | 3 > 5 | NULL |
>=, <= | Нестрогое сравнение | Принимают два операнда на вход, возвращают TRUE, если условие нестрогого сравнения выполняется | 4 <= 5 | TRUE |
LIKE | Сравнение с шаблоном | Принимает два операнда на вход: строку и шаблон. Возвращает TRUE, если строка соответствует шаблону | 'abc' LIKE 'a%' | TRUE |
MATCH | Полнотекстовый поиск | Принимает слева строку или TSVECTOR, справа строку или TSQUERY. Для строковых операндов выполняет полнотекстовый поиск и дополнительную проверку на вхождение подстроки, а для подготовленных TSVECTOR / TSQUERY использует эти значения напрямую | 'abc def' MATCH 'abc' | TRUE |
Результат сравнения всегда равен либо TRUE, либо NULL, но никогда FALSE: если условие сравнения не выполняется, результатом является NULL. Во всех операторах, если один из операндов NULL, результат также будет равняться NULL. Это касается и самого литерала NULL: a = NULL и a != NULL равны NULL при любом a, поэтому такое сравнение не может служить условием. Сервер выдаёт для него предупреждение при загрузке модуля. Равенство значения NULL проверяется использованием самого значения как условия (IF a THEN ..., NOT a).
Для операторов равенства и упорядочивания оба операнда должны принадлежать совместимым классам — встроенным классам одного семейства либо пользовательским классам, связанным наследованием.
Значения класса JSON сравниваются как JSON-документы, в том нормализованном виде, в котором они хранятся: два значения с одинаковыми ключами и значениями равны при любом порядке ключей и любом форматировании текста, поэтому JSON(r'{"a":1,"b":2}') = JSON(r'{"b": 2, "a": 1}') даёт TRUE. Значения класса JSONTEXT хранятся и сравниваются как текст.
Язык
Описание общих операторов сравнения.
Для создания свойства, сравнивающего строку с шаблоном, используется оператор LIKE. Для полнотекстового поиска используется оператор MATCH.
Примеры
equalBarcodes = barcode(a) = barcode(b);
outOfIntervalValue1(value, left, right) = value < left OR value > right;
outOfIntervalValue2(value, left, right) = NOT (value >= left AND value <= right);
isPhoneNumber(value) = value LIKE '(___) ___-____';