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

потому что NULL = NULL возвращает false, никакие записи не будут возвращены для этой строки

WHERE student.name = ISNULL(@name, student.name)

А также

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)

sqlserver.bilee.com

sql - Проверка данных SQL и проверка на Null

У меня есть текстовое поле (txtOrderNum), в котором вы вводите номер заказа и обновляете "поле пользователя" на основе даты, сгенерированной в другом текстовом поле (txtDate), я хочу подтвердить, что введенный номер "order" соответствует "Order" 'в базе данных, а затем обновить "UserField1", только если его NULL, если он не соответствует, ничего не делает.

Моя цель: я не хочу переписывать данные, которые уже находятся в Userfield1, и я хочу, чтобы я обновил правильный номер "Заказ", который существует.

**** Я обновил свой код на основе предложения ниже, мне просто нужно проверить, существует ли номер заказа и соответствует номеру заказа, введенному в текстовое поле, а затем запускать запрос на обновление. (также нужно параметризовать запрос, у меня есть некоторые идеи, но можно использовать некоторую помощь) ****

Public Sub executequery(ByVal query As String) Try Dim cmd As New SqlCommand(query, conn) conn.Open() If (conn.State = ConnectionState.Open) Then cmd.ExecuteNonQuery() conn.Close() Else MessageBox.Show("Check Connection") conn.Close() End If Catch ex As Exception MsgBox(ex.ToString) Return Finally conn.Close() End Try End Sub

"Мое событие вызова через клавишу ввода в текстовом поле (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 источник поделиться

qaru.site