×
Мы обрабатываем 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 3t

2 BETWEEN 3 AND 1f

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

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

2 NOT BETWEEN 1 AND 3f

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

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

2 BETWEEN SYMMETRIC 3 AND 1t

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

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

2 NOT BETWEEN SYMMETRIC 3 AND 1f

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

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

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

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

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

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

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

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

тип данных оператор IS NULLboolean

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

1.5 IS NULLf

тип данных оператор IS NOT NULLboolean

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

'null' IS NOT NULLt

тип данных ISNULLboolean

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

тип данных NOTNULLboolean

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

boolean IS TRUEboolean

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

true IS TRUEt

NULL::boolean IS TRUEf (в отличие от NULL)

boolean IS NOT TRUEboolean

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

true IS NOT TRUEf

NULL::boolean IS NOT TRUEt (в отличие от NULL)

boolean IS FALSEboolean

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

true IS FALSEf

NULL::boolean IS FALSEf (в отличие от NULL)

boolean IS NOT FALSEboolean

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

true IS NOT FALSEt

NULL::boolean IS NOT FALSEt (в отличие от NULL)

boolean IS UNKNOWNboolean

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

true IS UNKNOWNf

NULL::boolean IS UNKNOWNt (в отличие от NULL)

boolean IS NOT UNKNOWNboolean

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

true IS NOT UNKNOWNt

NULL::boolean IS NOT UNKNOWNf (в отличие от 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 предусмотрена переменная конфигурации. Если данный параметр включен, СУБД PostgreSQL будет преобразовывать 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


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

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