×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.6.2. Функции и операторы сравнения

Доступны стандартные операторы сравнения, приведенные в Таблица 2.6.1.

Таблица 2.6.1. Операторы сравнения

ОператорОписание
тип данных < тип данных → boolean Меньше
тип данных > тип данных → boolean Больше
тип данных <= тип данных → boolean Меньше или равно
тип данных >= тип данных → boolean Больше или равно
тип данных = тип данных → boolean Равно
тип данных <> тип данных → boolean Не равно
тип данных != тип данных → boolean Не равно

Примечание

<> представляет собой стандартную нотацию языка SQL для «не равно». != является псевдонимом, который преобразуется в <> на самом раннем этапе синтаксического анализа. Следовательно, реализация != и <> как операторы, выполняющие различные действия, невозможна.

Данные операторы сравнения доступны для всех встроенных типов данных, обладающих естественным порядком сортировки, включая числовые и строковые типы, а также типы даты/времени. Кроме того, можно сравнивать массивы, составные типы и диапазоны, если сопоставимы их составляющие типы данных.

Обычно также допускается сравнение значений связанных типов данных; например, integer > bigint будет работать. Некоторые подобные случаи реализуются непосредственно при помощи «межтиповых» операторов сравнения, однако при отсутствии такого оператора синтаксический анализатор выполнит приведение менее общего типа к более общему и применит оператор сравнения последнего.

Как показано выше, все операторы сравнения являются бинарными операторами, возвращающими значения типа boolean. Таким образом, выражения вида 1 < 2 < 3 не являются допустимыми (поскольку отсутствует < оператор для сравнения логического значения с 3). Используйте BETWEEN предикаты, приведенные ниже, для выполнения проверки на вхождение в диапазон.

Существует также ряд предикатов сравнения, как показано в Таблица 2.6.2. По своему действию они подобны операторам, но имеют специальный синтаксис, определенный стандартом SQL.

Таблица 2.6.2. Предикаты сравнения

Предикат

Описание

Примеры

тип данных BETWEEN тип данных AND тип данных → boolean

Нахождение в диапазоне (включая его границы).

2 BETWEEN 1 AND 3 → t

2 BETWEEN 3 AND 1 → f

тип данных NOT BETWEEN тип данных AND тип данных → boolean

Оператор NOT BETWEEN (отрицание BETWEEN).

2 NOT BETWEEN 1 AND 3 → f

тип данных BETWEEN SYMMETRIC тип данных AND тип данных → boolean

Проверка вхождения в диапазон после сортировки двух граничных значений.

2 BETWEEN SYMMETRIC 3 AND 1 → t

тип данных NOT BETWEEN SYMMETRIC тип данных AND тип данных → boolean

Проверка невхождения в диапазон после сортировки двух граничных значений.

2 NOT BETWEEN SYMMETRIC 3 AND 1 → f

тип данных IS DISTINCT FROM тип данных → boolean

Проверка на неравенство, при которой значение NULL рассматривается как сопоставимое.

1 IS DISTINCT FROM NULL → t (в отличие от NULL)

NULL IS DISTINCT FROM NULL → f (в отличие от NULL)

тип данных IS NOT DISTINCT FROM тип данных → boolean

Проверка на равенство, при которой значение NULL рассматривается как сопоставимое.

1 IS NOT DISTINCT FROM NULL → f (в отличие от NULL)

NULL IS NOT DISTINCT FROM NULL → t (в отличие от NULL)

тип данных оператор IS NULL → boolean

Проверка того, является ли значение неопределенным (NULL).

1.5 IS NULL → f

тип данных оператор IS NOT NULL → boolean

Проверка того, что значение не является неопределенным (NULL).

'null' IS NOT NULL → t

тип данных ISNULL → boolean

Проверка того, является ли значение неопределенным (нестандартный синтаксис).

тип данных NOTNULL → boolean

Проверка того, что значение не является неопределенным (нестандартный синтаксис).

boolean IS TRUE → boolean

Проверка того, возвращает ли логическое выражение значение true.

true IS TRUE → t

NULL::boolean IS TRUE → f (в отличие от NULL)

boolean IS NOT TRUE → boolean

Проверка того, возвращает ли логическое выражение значение false или unknown.

true IS NOT TRUE → f

NULL::boolean IS NOT TRUE → t (в отличие от NULL)

boolean IS FALSE → boolean

Проверка того, возвращает ли логическое выражение значение false.

true IS FALSE → f

NULL::boolean IS FALSE → f (в отличие от NULL)

boolean IS NOT FALSE → boolean

Проверка того, возвращает ли логическое выражение значение true или unknown.

true IS NOT FALSE → t

NULL::boolean IS NOT FALSE → t (в отличие от NULL)

boolean IS UNKNOWN → boolean

Проверка того, возвращает ли логическое выражение значение unknown.

true IS UNKNOWN → f

NULL::boolean IS UNKNOWN → t (в отличие от NULL)

boolean IS NOT UNKNOWN → boolean

Проверка того, возвращает ли логическое выражение значение true или false.

true IS NOT UNKNOWN → t

NULL::boolean IS NOT UNKNOWN → f (в отличие от NULL)


Данный BETWEEN предикат упрощает проверку попадания в диапазон:

a BETWEEN x AND y

эквивалентно

a >= x AND a <= y

Обратите внимание на то, что BETWEEN рассматривает граничные значения как включенные в диапазон. BETWEEN SYMMETRIC аналогичен BETWEEN за исключением того, что отсутствует требование, чтобы аргумент слева от AND был меньше или равен аргументу справа. Если это условие не выполняется, данные аргументы автоматически меняются местами, так что в итоге всегда подразумевается непустой диапазон.

Различные варианты оператора BETWEEN реализованы на основе обычных операторов сравнения и, следовательно, применимы к любым типам данных, поддерживающим сравнение.

Примечание

Использование оператора AND в синтаксисе BETWEEN создает неоднозначность с использованием AND в качестве логического оператора. Для разрешения этой неоднозначности в качестве второго аргумента предложения BETWEEN допускается только ограниченный набор типов выражений. Если требуется указать более сложное подвыражение в BETWEEN, данное подвыражение следует заключить в круглые скобки.

Обычные операторы сравнения возвращают значение null (означающее «unknown»), а не true или false, если какой-либо из входных операндов равен null. Например, 7 = NULL возвращает null, так же как и выражение 7 <> NULL. Когда такое поведение неприемлемо, следует использовать IS [ NOT ] DISTINCT FROM предикаты:

a IS DISTINCT FROM b
a IS NOT DISTINCT FROM b

Для операндов, не являющихся значениями null, IS DISTINCT FROM действует так же, как и <> оператор. Однако если оба операнда имеют значение null, он возвращает false, а если значение null имеет только один операнд — true. Аналогично, предикат IS NOT DISTINCT FROM идентичен оператору = для входных данных, отличных от NULL, однако он возвращает истину (true), когда оба входных значения имеют значение NULL, и ложь (false), если только одно из значений является NULL. Таким образом, данные предикаты функционируют так, как если бы значение NULL было обычным значением данных, а не «unknown».

Для проверки того, является ли значение пустым (NULL) или нет, используются следующие предикаты:

выражение оператор IS NULL
выражение оператор IS NOT NULL

или эквивалентные, но не соответствующие стандарту предикаты:

выражение ISNULL
выражение NOTNULL

Не не пишите выражение = NULL поскольку NULL не является «равным» NULL. (Значение null представляет собой неизвестное значение, и неизвестно, равны ли два таких значения между собой.)

Подсказка

Для некоторых приложений может ожидаться, что выражение = NULL возвращает true, если выражение результатом выражения является значение null. Настоятельно рекомендуется модифицировать данные приложения для обеспечения их соответствия стандарту SQL. Однако в случае, если это действие невозможно выполнить, transform_null_equals предусмотрена переменная конфигурации. Если данный параметр включен, Digital Q.DataBase будет преобразовывать x = NULL выражения в x IS NULL.

Если выражение является составным значением (строкой), то оператор IS NULL принимает значение «истина», если само строчное выражение имеет значение null или если все поля этой строки имеют значение null, в то время как оператор IS NOT NULL принимает значение «истина», если само строчное выражение не является null и все поля данной строки также не являются null. В силу подобного поведения оператор IS NULL и оператор IS NOT NULL не всегда возвращают противоположные результаты для выражений со значениями типа «строка» (row-valued expressions); в частности, выражение со значением типа «строка», содержащее как поля NULL, так и поля с отличными от NULL значениями, вернет значение false для обеих проверок. Например:

SELECT ROW(1,2.5,'this is a test') = ROW(1, 3, 'not the same');

SELECT ROW(table.*) IS NULL FROM table;  -- обнаружение строк, полностью состоящих из значений NULL

SELECT ROW(table.*) IS NOT NULL FROM table;  -- обнаружение строк, не содержащих ни одного значения NULL

SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- обнаружение строк, содержащих хотя бы одно значение NULL

В некоторых случаях может быть предпочтительнее записывать выражение ROW IS DISTINCT FROM NULL или выражение ROW IS NOT DISTINCT FROM NULL, который позволяет просто проверить, является ли значение всей строки в целом значением NULL, без проведения дополнительных проверок отдельных полей этой строки.

Логические значения также можно проверять с помощью предикатов

boolean_expression IS TRUE
boolean_expression IS NOT TRUE
boolean_expression IS FALSE
boolean_expression IS NOT FALSE
boolean_expression IS UNKNOWN
boolean_expression IS NOT UNKNOWN

Данные предикаты всегда возвращают логическое значение true или false и никогда не возвращают null, даже если операнд имеет значение null. Входное значение null в таких случаях обрабатывается как логическое значение «unknown». Обратите внимание, что IS UNKNOWN и IS NOT UNKNOWN фактически эквивалентны оператор IS NULL и оператор IS NOT NULL, соответственно, за исключением того, что входное выражение должно иметь тип Boolean.

Также доступны некоторые функции сравнения, представленные в Таблица 2.6.3.

Таблица 2.6.3. Функции сравнения

Функция

Описание

Примеры

num_nonnulls ( VARIADIC "any" ) → integer

Возвращает количество аргументов, не равных NULL.

num_nonnulls(1, NULL, 2) → 2

num_nulls ( VARIADIC "any" ) → integer

Возвращает количество аргументов со значением NULL.

num_nulls(1, NULL, 2) → 1


Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению