NULL в запросах 1С 8.3. Функция ЕСТЬNULL —

Проверка на NULL

Значение NULL возвращается в том случае, когда реквизита попросту нет. Тип в этом случае будет тоже NULL. Например, вы объединяете две таблицы через левое соединение. В том случае, когда для левой таблицы не будет найдено ни одного значения в правой, вернется NULL.

Проверку на данное значение можно осуществить при помощи конструкции «ЕСТЬ NULL» и «ЕСТЬNULL()». В первом случае возвращается Истина или Ложь. Во втором случае можно сразу задать другое значение в том случае, когда возвращается NULL.

В приведенном ниже запросе 1С 8.3 будут возвращен список контактных лиц тех партнеров, у кого не задан сегмент.

ВЫБРАТЬ КонтактныеЛицаПартнеров.Ссылка ИЗ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СегментыПартнеров КАК СегментыПартнеров ПО КонтактныеЛицаПартнеров.Владелец = СегментыПартнеров.Родитель ГДЕ СегментыПартнеров.Ссылка ЕСТЬ NULL

ЕСТЬ NULL в запросе

С помощью оператора ЕСТЬ NULL можно проверить является ли значение NULL:

123456789101112 ВЫБРАТЬ ПродажаУслуг.НомерКАК Номер, ПродажаУслуг.ПокупательКАК Покупатель, ПродажаУслуг.Покупатель.НаименованиеКАК ПокупательНаименование, ПродажаУслуг.Покупатель.КодКАК ПокупательКод, ВЫБОР КОГДАПродажаУслуг.Покупатель.Код ЕСТЬ NULL ТОГДАИСТИНА ИНАЧЕЛОЖЬ КОНЕЦ КАК ЭтоNULLИЗ Документ.ПродажаУслугКАК ПродажаУслуг

Если покупатель в документе не заполнен, то запрос вернет следующий результат:

ЕСТЬ NULL можно использовать в условии:

ЕСТЬ NULL можно использовать в условии:

1234567 ВЫБРАТЬ ПродажаУслуг.НомерКАК Номер, ПродажаУслуг.ПокупательКАК ПокупательИЗ Документ.ПродажаУслугКАК ПродажаУслугГДЕ ПродажаУслуг.Покупатель.Код ЕСТЬ NULL

Для проверки, что значение не равно NULL можно использовать ЕСТЬ НЕ NULL или НЕ ЕСТЬ NULL:

1234567 ВЫБРАТЬ ПродажаУслуг.НомерКАК Номер, ПродажаУслуг.ПокупательКАК ПокупательИЗ Документ.ПродажаУслугКАК ПродажаУслугГДЕ ПродажаУслуг.Покупатель.Код ЕСТЬ НЕ NULL

Функция NULL в MySQL

В системе MySQL есть ряд функций, позволяющих результативно работать с NULL. Это IFNULL, NULLIF и COALESCE.

  • IFNULL может принять два параметра: возвращает первый аргумент, если он не является NULL, в обратном случае — возвращает второй аргумент.
  • NULLIF также может принять два аргумента: если они равны, то функция возвращает NULL, в обратном случае — возвращает первый аргумент. Эта функция также будет эффективна, если в вашей таблице в столбце есть пустые строки со значением NULL.
  • COALESCE может принимать список аргументов и возвращать первый аргумент не-NULL. Например, эту функцию можно применять для базы контактных данных с потенциальной возможностью в зависимости от важности информации в порядке Телефон — Электронная почта — N/A.

Отступление

Как вы помните, некоторые элементы справочника Города не имеют реквизита ОтличительныйПризнак. Функция ТИПЗНАЧЕНИЯ для таких элементов выдаёт NULL.

Как можно сделать отбор таких элементов в запросе? Для этого предусмотрен специальный логический оператор ЕСТЬ NULL (не путать с функцией ЕСТЬNULL, которую мы рассмотрим ниже). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Вот пример его использования:

Отлично.

Но есть и такие элементы (Сан-Паулу), у которых реквизит ОтличительныйПризнак (составного типа) просто не заполнен и равен специальному значению НЕОПРЕДЕЛЕНО.

Чтобы отобрать такие записи следует использовать другую конструкцию:

Но сравнение с НЕОПРЕДЕЛЕНО для определения пустых (не заполненных) реквизитов будет работать только для составных типов.

Кстати, у логического оператора ЕСТЬ NULL форма отрицания выглядит следующим образом:

Функция ЕСТЬNULL

Функция предназначена для замены значения NULL на другое значение.

Мы помним, что значение NULL возвращается в том случае, если запрашиваемый реквизит (поле, свойство) не существует.

Как например, реквизит ОтличительныйПризнак для групп справочника Города:

Функция ЕСТЬNULL поможет нам вывести другое значение в том случае, если это значение равно NULL. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Пусть в данном случае это будет строка «Такого реквизита нет!»:

Получается, что если первый параметр функции ЕСТЬNULL не равен NULL, то возвращается он. Если же он равен NULL, то возвращается второй параметр.

Отличия функции ЕСТЬNULL() от ЕСТЬ NULL

Как вы могли увидеть из предыдущих примеров, в обоих случаях запрос возвращает одни и те же данные. Функция ЕСТЬNULL() является сокращенным вариантом ВЫБОР КОГДА … ЕСТЬ NULL … КОНЕЦ, но она все же будет предпочтительнее по следующим причинам:

  1. Функция EСТЬNULL() оптимизирует запрос. Она считывается один раз, поэтому при проверке сложного выражения, запрос отработает быстрее.
  2. Функция EСТЬNULL() сокращает конструкцию, за счет чего запрос становится более читабельным.
  3. При выполнении функции EСТЬNULL() выражение замены приводится к типу проверяемого выражения для типов строковых типов (к длине строки) и числовых (к разрядности).

Теги