Oracle PL/SQL •MySQL •SQL Server. Проверка на null sql
Проверка на NULL
Проверка на NULL
В свете того, какой беспорядок может навести NULL, вы часто захотите узнать, является ли что-либо NULL прежде, чем вы будете использовать это в выражении. Для некоторых очевидная проверка должна выглядеть так:
И в самом деле, есть системы управления базами данных, которые поддерживают такой синтаксис проверки на NULL. Но стандарт SQL не допускает этого, не допускает этого и СУБД Firebird. В версиях до 2.0 такой синтаксис был даже недопустим. С версии 2.0 он разрешается, но сравнение всегда вернет NULL, независимо от состояния и значения A. Поэтому такой тест на NULL является бесполезным - нам нужен явный результат true или false.
Корректный способ проверки на NULL такой:
...is null / ...is not null
Эта проверка всегда вернет true или false - и никакой неразберихи. Примеры:
- if (MyField is null) then...
- select * from Pupils where PhoneNumber is not null
- select * from Pupils where not (PhoneNumber is null) /* делает то же самое, что и предыдущий пример */
- update Numbers set Total = A + B + C where A + B + C is not null
Можно сказать, что в то время как равенство «=» (когда используется как оператор равенства) может сравнивать значения, «is» проверяет состояние.
www.firebirdsql.org
IS NULL условие | Oracle PL/SQL •MySQL •SQL Server
Это учебное пособие Oracle объясняет, как использовать Oracle условие IS NULL с синтаксисом и примерами.
Описание
Oracle условие IS NULL используется для проверки значения NULL. Вы можете использовать условие IS NULL или в SQL предложении или в блоке PLSQL кода.
Синтаксис
Синтаксис для условия IS NULL в Oracle/PLSQL:
expression IS NULL
Параметры или аргументы
expression
Выражение, которое нужно проверить на содержание значения NULL.
Примечание
- Если expression содержит значение NULL, то условие принимает значение TRUE.
- Если expression не содержит значение NULL, то условие принимает значение FALSE.
Пример с оператором SELECT
Ниже приведен пример того, как использовать Oracle условие IS NULL в запросе SELECT:
SELECT * FROM suppliers WHERE supplier_name IS NULL;
SELECT * FROM suppliers WHERE supplier_name IS NULL; |
Этот пример IS NULL возвратит все записи из таблицы suppliers, где поле supplier_name содержит значение NULL.
Пример с оператором INSERT
Ниже приведен пример того, как использовать Oracle условие IS NULL в операторе INSERT:
INSERT INTO suppliers (supplier_id, supplier_name) SELECT account_no, name FROM customers WHERE city IS NULL;
INSERT INTO suppliers (supplier_id, supplier_name) SELECT account_no, name FROM customers WHERE city IS NULL; |
Этот пример IS NULL будет вставлять записи в таблицу suppliers, где поле city содержит значение NULL.
Пример с оператором UPDATE
Ниже приведен пример того, как использовать Oracle условие IS NULL в операторе UPDATE:
UPDATE suppliers SET name = 'Apple' WHERE name IS NULL;
UPDATE suppliers SET name = 'Apple' WHERE name IS NULL; |
Этот пример IS NULL будет обновлять записи в таблице suppliers, где поле name содержит значение NULL.
Пример c оператором DELETE
Ниже приведен пример того, как использовать Oracle условие IS NULL в DELETE:
DELETE FROM suppliers WHERE supplier_name IS NULL;
DELETE FROM suppliers WHERE supplier_name IS NULL; |
Этот пример IS NULL удалит все записи из таблицы suppliers, где поле supplier_name содержит значение NULL.
Пример использование в блоке PLSQL кода
Вы можете использовать Oracle условие IS NULL в PLSQL, чтобы проверить, если значение содержит NULL.
Например
IF variable IS NULL then ... END IF;
IF variable IS NULL then
...
END IF; |
Если переменная variable содержит значение NULL, то условие «IF» выражение будет вычисляться в TRUE.
В этом учебном пособии Oracle вы узнаете, как проверить значение, которое не содержит NULL.
oracleplsql.ru
Проверка NULL в Sql MS SQL Server
Пожалуйста, предложите, какая разница между:
На самом деле у меня возникла ошибка, связанная с моим именем, где некоторые из записей, которые были пропущены, когда я использовал первый метод. Но исправлено, когда я заменил его, например, на 2.
Второй параметр для ISNULL() – это значение замены , то есть значение, которое будет заменено, если первый параметр равен нулю. Таким образом, если оба имени @name и student.name имеют значение null , вы, по сути, должны писать:
student.name = NULL
Который приравнивается к false (поскольку null в SQL считается неизвестным и никогда не равен чему-либо).
Во втором случае вы используете оператор IS для проверки нулевого значения, которое вернет true если @name равно null.
Вот разница
name |student.name |first_result |second_result |expected* A |A |true |true |true A |B |false |false |false null |A |true |true |true A |null |false |false |false null |null |FALSE |TRUE |TRUEКак вы видите, разница возникает, когда оба значения имеют значение NULL, потому что в этом случае ваш первый WHERE оценивает: null = null (что является FALSE).
Вы можете проверить это на SQL Server с помощью:
select case when null = null then 1 else 0 endкоторый даст вам 0.
Во втором заявлении указано « Выбрать записи», когда имя ученика соответствует @name или когда имя не указано. Если указано имя @name, выберите это имя. Если @name пусто, выберите все записи. Это не заботится о том, какое значение находится в таблице, когда @name NULL
Для первого оператора, если @name NULL, он будет использовать student.name, которое совпадает с именем student_name текущей строки
Когда и имя @name и student.name имеют значение NULL
WHERE student.name = @name OR @name IS NULL -- the other part of the OR is true so records will be returnedа также
WHERE student.name = ISNULL(@name, student.name) becomes WHERE NULL = NULLА также
WHERE (student.name = @name OR @name IS NULL)эквивалентны, за исключением того, что student.name имеет значение NULL.
WHERE (student.name = @name OR @name IS NULL)могут быть упрощены:
WHERE COALESCE(student.name,'nul') = COALESCE(@name, student.name,'nul')А также
WHERE student.name = ISNULL(@name, student.name)эквивалентно
WHERE (student.name = @name OR @name IS NULL AND student.name IS NOT NULL)Если у вас установлен системный параметр ANSI_NULLS , значение null = anything является ложным.
Таким образом, первый запрос не будет возвращать любые записи, где student.name равно null, даже если имя @name равно null, поскольку сравнение оценивается как where null=null для записей, где student.name равно null, а null=null возвращает false
Проверьте примеры ниже и в своем втором варианте вы можете проверить, что @name имеет значение null, прежде чем проверять имя = @name.
declare @name varchar(10) = null declare @table table (name varchar(10)) insert into @table select 'A' UNION SELECT null ---returns only A because null = column is always false select * from @table where name = ISNULL(@name, name) --returns all rows select * from @table where (@name is null or name = @name) set @name = 'A' select * from @table where name = ISNULL(@name, name) select * from @table where (@name is null or name = @name)sql - Проверка данных SQL и проверка на Null
У меня есть текстовое поле (txtOrderNum), в котором вы вводите номер заказа и обновляете "поле пользователя" на основе даты, сгенерированной в другом текстовом поле (txtDate), я хочу подтвердить, что введенный номер "order" соответствует "Order" 'в базе данных, а затем обновить "UserField1", только если его NULL, если он не соответствует, ничего не делает.
Моя цель: я не хочу переписывать данные, которые уже находятся в Userfield1, и я хочу, чтобы я обновил правильный номер "Заказ", который существует.
**** Я обновил свой код на основе предложения ниже, мне просто нужно проверить, существует ли номер заказа и соответствует номеру заказа, введенному в текстовое поле, а затем запускать запрос на обновление. (также нужно параметризовать запрос, у меня есть некоторые идеи, но можно использовать некоторую помощь) ****
"Мое событие вызова через клавишу ввода в текстовом поле (txtOrdernum)
Dim conn As New SqlConnection("My data source") Try Dim updatequery As String = ("UPDATE [DATA].[dbo].[Order] SET [Userfield1] = '" & txtDate.Text.Trim() & "' WHERE [order] ='" & txtOrdernum.Text.Trim() & "' AND [Userfield1] IS NULL") If e.KeyChar = Chr(13) Then 'Chr(13) If txtOrdernum.Text.Length >= 8 Then 'MessageBox.Show(updatequery) executequery(updatequery) Else MessageBox.Show("Invalid Order Number'") End If Catch ex As Exception MsgBox(ex.ToString) Return End Try задан Ben 18 авг. '17 в 20:26 источник поделиться