Как в sql запросе вместо null поставить 0 1с

Обновлено: 03.07.2024

Я разработал запрос, и в результатах для первых трех столбцов я получаю NULL . Как я могу заменить его на 0 ?

когда вы хотите заменить, возможно

  1. функция ISNULL и выражение COALESCE имеют аналогичный цели, но может вести себя по-разному.

  2. поскольку ISNULL-это функция, она вычисляется только один раз. Как описанные выше входные значения для выражения COALESCE могут быть оценено несколько раз.

  3. определение типа данных результирующего выражения отличается. ISNULL использует тип данных первого параметра, КОАЛЕСЦИРУЕТ следующим образом выражение CASE управляет и возвращает тип данных значения с помощью более высокий приоритет.

  4. поддерживает ли это выражение, результат индивидуален для функции isnull и СПЛОТИТЬСЯ. Возвращаемое значение функция isnull всегда считается не допускает значения null (предполагая, что возвращаемое значение не является нулевым), тогда как СПЛОТИТЬСЯ с ненулевыми параметрами считается NULL. Так выражения ISNULL(NULL, 1) и COALESCE (NULL, 1) хотя эквиваленты имеют разные значения обнуления. Это делает разница, если вы используете эти выражения в вычисляемых столбцах, создание ключевых ограничений или возвращаемое значение скалярной пользовательской функции детерминированный, чтобы его можно было индексировать, как показано ниже образец.

  1. проверки для ISNULL и COALESCE также различны. Например, значение NULL для ISNULL преобразуется в int, тогда как для COALESCE, необходимо указать тип данных.

  2. ISNULL принимает только 2 параметра в то время как COALESCE принимает переменную число параметров.

    Если вам нужно знать больше вот полный документ от msdn.

С coalesce :

хотя, где подводятся when condition then 1 , вы могли бы так же легко изменить sum до count , например:

( Count(null) возвращает 0, в то время как sum(null) возвращает значение null.)

NULL – отсутствующие значения.
Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено.

NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа.

NULL значения появляются в запросе в следующих ситуациях:
а) Внешнее соединение, при котором не было найдено соответствующей записи в другой таблице (при левом – во второй, при правом – в первой, при полном – в обоих)
б) Обращение к реквизитам элементов для группы и наоборот.
в) NULL в списке полей выборки (ВЫБРАТЬ)
г) Обращение к реквизитам для битой ссылки

ЕСТЬ NULL используется в операторе ВЫБРАТЬ (как бы проверя, что значение это есть пустое ( Значение ЕСТЬ NULL )):
Код 1C v 8.х
еще пример:
Код 1C v 8.х

Функция ЕСТЬNULL (значение, РезультатЕслиNULL) возвращает значение своего первого параметра, в случае если он не равен NULL, и значение второго параметра в противном случае
Является свернутым ВЫБОР…КОНЕЦ, но ЕСТЬNULL предпочтительнее.
Код 1C v 8.х
еще пример:
Код 1C v 8.х
В данном примере получаются все элементы справочника номенклатуры, после чего, для каждой номенклатуры из регистра накопления получаются текущие остатки. Т.к. для номенклатуры, по которой отсутствуют остатки, виртуальная таблица остатков не запись вернет, то в результате соединения в поле "УчетНоменклатурыОстатки.КоличествоОстаток" будут значения NULL для номенклатуры, по которой не было остатков. Для того чтобы вместо значения NULL в результате запроса присутствовало значение 0, мы использовали функцию ЕСТЬNULL(), которая осуществит желаемую замену.

ЕСТЬNULL отличается от ВЫБОР по следующим причинам:
а) При ЕСТЬNULL лучше читается запрос (проще)
б) При ЕСТЬNULL, если проверяется сложное выражение, то работает быстрее, поскольку вычисляется один раз
в) При ЕСТЬNULL выражение замены приводится к типу проверяемого выражения, если оно имеет тип Строка (длина) или Число (разрядность).

Нельзя проверять значения на NULL обычным равенством, потому что в SQL действует трехзначная логика – Истина, Ложь, NULL, и результатом такого сравнения будет UNKNOWN, что в 1С 8.0 аналогично ЛОЖЬ.
NULL <> 0, поэтому при левых внешних соединениях спр. Номенклатура с таблицами остатков, цен, Контрагентов со взаиморасчетами при отсутствии таких записей там будет NULL, который не равен 0. Лучшее решение – ЕСТЬNULL

NULL – отсутствующие значения.
Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено.

NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа.

NULL значения появляются в запросе в следующих ситуациях:
а) Внешнее соединение, при котором не было найдено соответствующей записи в другой таблице (при левом – во второй, при правом – в первой, при полном – в обоих)
б) Обращение к реквизитам элементов для группы и наоборот.
в) NULL в списке полей выборки (ВЫБРАТЬ)
г) Обращение к реквизитам для битой ссылки

ЕСТЬ NULL используется в операторе ВЫБРАТЬ (как бы проверя, что значение это есть пустое ( Значение ЕСТЬ NULL )):
Код 1C v 8.х
еще пример:
Код 1C v 8.х

Функция ЕСТЬNULL (значение, РезультатЕслиNULL) возвращает значение своего первого параметра, в случае если он не равен NULL, и значение второго параметра в противном случае
Является свернутым ВЫБОР…КОНЕЦ, но ЕСТЬNULL предпочтительнее.
Код 1C v 8.х
еще пример:
Код 1C v 8.х
В данном примере получаются все элементы справочника номенклатуры, после чего, для каждой номенклатуры из регистра накопления получаются текущие остатки. Т.к. для номенклатуры, по которой отсутствуют остатки, виртуальная таблица остатков не запись вернет, то в результате соединения в поле "УчетНоменклатурыОстатки.КоличествоОстаток" будут значения NULL для номенклатуры, по которой не было остатков. Для того чтобы вместо значения NULL в результате запроса присутствовало значение 0, мы использовали функцию ЕСТЬNULL(), которая осуществит желаемую замену.

ЕСТЬNULL отличается от ВЫБОР по следующим причинам:
а) При ЕСТЬNULL лучше читается запрос (проще)
б) При ЕСТЬNULL, если проверяется сложное выражение, то работает быстрее, поскольку вычисляется один раз
в) При ЕСТЬNULL выражение замены приводится к типу проверяемого выражения, если оно имеет тип Строка (длина) или Число (разрядность).

Нельзя проверять значения на NULL обычным равенством, потому что в SQL действует трехзначная логика – Истина, Ложь, NULL, и результатом такого сравнения будет UNKNOWN, что в 1С 8.0 аналогично ЛОЖЬ.
NULL <> 0, поэтому при левых внешних соединениях спр. Номенклатура с таблицами остатков, цен, Контрагентов со взаиморасчетами при отсутствии таких записей там будет NULL, который не равен 0. Лучшее решение – ЕСТЬNULL

+ так же нет пустой даты, есть Дата("00010101"), что и является пустой датой.

И т.д. другие грабли.

NULL в Системах управления базами данных (СУБД) — специальное значение (псевдозначение), которое может быть записано в поле таблицы базы данных (БД). NULL соответствует понятию «пустое поле», то есть «поле, не содержащее никакого значения». Введено для того, чтобы различать в полях БД пустые (визуально не отображаемые) значения (например, строку нулевой длины) и отсутствующие значения (когда в поле не записано вообще никакого значения, даже пустого).
Мнение 1: NULL является необходимым и обязательным для любой БД, претендующей на реляционность. В частности без него невозможно корректно построить внешнее соединение (OUTER JOIN) строк из двух таблиц. Именно этой точки зрения придерживался Э. Кодд, явно включив его в качестве третьего из 12 правил для реляционных СУБД. Именно этот принцип закреплен в последних стандартах на язык SQL .
Мнение 2: Значение NULL не требуется, а его использование — следствие ошибки проектирования БД. В базе данных, разработанной в полном соответствии с критериями нормализации, не может быть полей без значений, а значит, не нужно и специальное псевдозначение для таких полей. На практике, однако, из соображений эффективности, нередко оказывается удобным пренебречь некоторыми из правил нормализации, но одним из видов платы за такое пренебрежение является появление пустых полей, для которых и предназначен NULL.
(0) на самом деле это придумали в злобной корпорации 1С, а реальные люди используют только NULL
Замечание: нет такого типа - "пустое значение", но есть функция ПустоеЗначение(), которая определяет заполненоность и возвращаеть Истина/Ложь
(0) Пустое значение: "В этот гараж можно поставить что угодно, но ожидается, что в нем должна стоять машина марки Тойота, хотя ее там сейчас нет"
(25) Пустое значение - это пустое значение. При чем тут тип ?
а вот "коза", которую подсунуло 1С в типовой УТ 10.3
как известно, практически всюду для составного типа в запросе проверка на незаполненность это сравнение с Неопределено, однако в РС СкидкиНаценкиНоменклатуры для ПолучательСкидки это ДоговорыКонтрагентов.ПустаяСсылка

(0) неопределено юзай если ты явно хочешь грохнуть объект

Пустое значение - В этом месте может лежать точно знаю что, но его нет.
(Есть пустой горшок для хранения меда)

Неопределено - В этом месте чего-то нет, но чего именно неизвестно.
(Есть пустой горшок, в него можно положить что угодно. Если это что-то в него влезет конечно.)

Null - Совсем ничего нет
(Нет ни меда, ни шарика. Даже горшка нет, куда можно что-нибудь положить положить)

Читайте также: