Mysql isnull: SQL ISNULL(), NVL(), IFNULL() and COALESCE() Functions
База Данных MySQL NULL Функции
SQL IFNULL(), ISNULL(), COALESCE(), И NVL() Функции
Посмотрите на следующую таблицу «Products»:
P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | Mascarpone | 32.56 | 23 | |
3 | Gorgonzola | 15.67 | 9 | 20 |
Предположим, что столбец «унитсонордер» является необязательным и может содержать значения NULL.
Посмотрите на следующую инструкцию SELECT:
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products;
В приведенном выше примере, если какое-либо из значений «унитсонордер» имеет значение null, результат будет равен null.
Решения
MySQL
MySQL IFNULL() функция позволяет возвращать альтернативное значение, если выражение имеет значение NULL:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products
или мы можем использовать функцию объединения coalesce() , как это:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products
SQL Server
Функция SQL Server IsNull() позволяет возвращать альтернативное значение, если выражение имеет значение NULL:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products
MS Access
Функция MS Access IsNull() возвращает true (-1), если выражение является нулевым значением, в противном случае — false (0):
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products
Oracle
Функция Oracle NVL() достигает того же результата:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products
ISNULL(value, 0) в предложении WHERE MYSQL
У меня есть этот реквит:
SELECT sc. no, scl.quantite, scl.description, scl.poids, scl.prix, sl_ref.refsl, sl_ref.codetva, sl_ref.tauxtva, sl_ref.compte
FROM shop_commande
AS sc, shop_commande_ligne AS scl, selectline_ref AS sl_ref
WHERE sc.id = scl.shop_commande_id
AND sl_ref.refshop = ISNULL(scl.shop_article_id, 0)
AND sc.id NOT IN (SELECT id_command FROM selectline_flag)
Иногда в sl_shop_article_id есть значение NULL. Что я хочу, так это заменить его на 0, так что предложение:
sl_ref.refshop = scl.shop_article_id
может работать, даже если scl.shop_article_id — это NULL. Для этого я попытался использовать функцию ISNULL, но она делает запрос неправильным, и я получаю там ошибку:
1582 — неверное количество параметров при вызове собственной функции ‘ISNULL’
Как я могу его использовать ?
mysql
where
isnull
Поделиться
Источник
Maloz
21 марта 2017 в 16:07
2 ответа
- Как увеличить скорость отчета, состоящего из функции ISNULL() в предложении where
У меня есть медленный отчет , я выяснил, какая часть запроса медленная, она связана с предложением WHERE в предложении INSERT . В этом предложении WHERE есть некоторые функции ISNULL() , которые делают отчет медленным . Эти таблицы используются left join : CshTransBys & CshTransOwners ….
- Isnull в предложении where
SQL Server: Я пытаюсь написать что-то вроде этого: SELECT A.*, B.VALUE FROM A, B WHERE A.TYPE = B.TYPE AND B.VALUE = ISNULL(A.VALUE, ‘0000’) Итак, в принципе, я хочу найти B и найти, где TYPES совпадает, а поле значения равно = полю значения в A. Если он не найден, я хочу вместо этого найти B для…
7
Я полагаю, что вы пытаетесь использовать функцию IFNULL()
. IF вы заменили ISNULL
на IFNULL
, что должно исправить ваш запрос.
Я предлагаю вам пойти еще дальше и использовать COALESCE()
вместо IFNULL()
, поскольку COALESCE()
является частью стандарта SQL (а IFNULL()
-нет).
SELECT sc.no, scl.quantite, scl.description, scl.poids,
scl.prix, sl_ref.refsl, sl_ref.codetva, sl_ref.tauxtva, sl_ref.compte
FROM shop_commande
AS sc, shop_commande_ligne AS scl, selectline_ref AS sl_ref
WHERE sc.id = scl.shop_commande_id
AND sl_ref.refshop = COALESCE(scl.shop_article_id, 0)
AND sc.id NOT IN (SELECT id_command FROM selectline_flag)
Поделиться
Ike Walker
21 марта 2017 в 16:10
2
SELECT
sc.no
, scl.quantite
, scl.description
, scl.poids
, scl.prix
, sl_ref.refsl
, sl_ref.codetva
, sl_ref.tauxtva
, sl_ref.compte
FROM shop_commande
AS sc, shop_commande_ligne AS scl, selectline_ref AS sl_ref
WHERE sc.id = scl.shop_commande_id
AND sl_ref.refshop = IFNULL(scl.shop_article_id, 0)
AND sc.id NOT IN (SELECT id_command FROM selectline_flag)
Поделиться
scaisEdge
21 марта 2017 в 16:09
Похожие вопросы:
Улучшите производительность, использующую isnull в предложении where
Существует отчет, запрос которого использует isnull в предложении where, и это вызывает некоторые проблемы с производительностью. Вот очень упрощенный пример. http://www.sqlfiddle.com/#!6/79759/11…
IsNull в предложении sybase where
Я использую vb6 front end и sybase в качестве backend. Могу ли я использовать IsNull в предложении where или я должен использовать = NULL SQLStr = select distinct thrd_pty.id_thrd_pty,…
Linq — Sql isnull в предложении where не работает
У меня есть Linq запроса как: var notstartedcount = (from te in context.EH_PP_TeacherEvaluations join tesrt in context.EH_PP_TeacherEvaluationStatusesRefTables on te.EH_PP_TESRT_TeacherEvalStatusID…
Как увеличить скорость отчета, состоящего из функции ISNULL() в предложении where
У меня есть медленный отчет , я выяснил, какая часть запроса медленная, она связана с предложением WHERE в предложении INSERT . В этом предложении WHERE есть некоторые функции ISNULL() , которые…
Isnull в предложении where
SQL Server: Я пытаюсь написать что-то вроде этого: SELECT A. *, B.VALUE FROM A, B WHERE A.TYPE = B.TYPE AND B.VALUE = ISNULL(A.VALUE, ‘0000’) Итак, в принципе, я хочу найти B и найти, где TYPES…
функция isnull в предложении WHERE
Я пытаюсь исправить проблему в хранимой процедуре и наткнулся на проблему, которая меня раздражает. В принципе, isnull работает так, как ожидалось для одной записи в T0, но не в другой, где…
Как использовать ISNULL в предложении SQL between
У меня есть хранимая процедура SQL Server, которую кто-то написал там, где они используют isnull в предложении where в сочетании с ключевым словом between. Они используют следующее:…
Функция isnull и условия в предложении where
У меня есть фрагмент кода, где у меня есть куча условий ‘where’, объединенных с предложением ‘and’. Я хочу сделать следующую операцию: … and admission_date > release_date and case when @sample…
Заменить функцию ISNULL в предложении WHERE
Меня попросили переписать приведенные ниже запросы, исключив функцию ISNULL в предложении where из-за проблем с производительностью. Как я могу переписать приведенные ниже запросы, заменив функцию…
Использование ISNULL на int? в предложении WHERE из Linq запросов
Я пытался найти решение этой проблемы и видел много примеров того, как использовать функциональность ISNULL в операторе SELECT или как проверить наличие нулей в предложении WHERE , чтобы вернуть…
mysql — Выберите столбцы, в которых isnull () имеет значение false
У меня есть запрос, который работает, когда я запускаю его напрямую через диспетчер MySQL, однако этот запрос, похоже, не работает в моем приложении.
Я определил, что проблема заключается в следующем запросе:
SELECT task_id, member_id, SUM(NOT(ISNULL(completion_date))) AS complete, COUNT(id) AS total
FROM classroom_task_data
GROUP BY task_id, member_id
И, в частности, SUM(NOT(ISNULL(completion_date)))
.
Если я изменю его на SUM(ISNULL(completion_date))
(удалил NOT
), запрос будет работать в моем приложении. Я не знаю, почему это происходит, но я подумал, что могу попробовать другой подход, чтобы получить желаемый результат.
Я тоже пробовал SUM(NOT ISNULL(completion_date))
, но безуспешно. Я также тестировал COALESCE
, но не смог заставить его работать.
Поэтому мне интересно, как я могу написать вышесказанное по-другому, но при этом получить те же результаты.
Вот полный запрос, кстати:
SELECT id, title, member_id, instruction, start_date, end_date, is_archived, is_published, classroom_id, user_id
FROM (
SELECT task_id, member_id, SUM(NOT(ISNULL(completion_date))) AS complete, COUNT(id) AS total
FROM classroom_task_data GROUP BY task_id, member_id
)
AS td
JOIN
classroom_tasks AS t ON td.task_id = t.id
WHERE complete = total AND classroom_id = 35;
-1
Chris
7 Мар 2016 в 14:18
3 ответа
Лучший ответ
Оператор if даст тот же результат.
-0, если дата завершения равна нулю
-1, если дата завершения НЕ равна нулю
SUM( if(completion_date IS NULL, 0, 1)) AS complete
Может ты мог бы попробовать это
1
Johan
7 Мар 2016 в 11:32
Попробуйте IS NOT NULL:
SUM( completion_date IS NOT NULL )
0
Dylan Su
7 Мар 2016 в 11:23
Это будет суммировать завершение_дате, если они не равны нулю или иным образом добавить его с нулем.
COALESCE(SUM(completion_date),0)
0
Zamrony P. Juhara
7 Мар 2016 в 11:30
Функция ISNULL (Transact-SQL) — SQL Server
-
- Чтение занимает 3 мин
В этой статье
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Параллельное хранилище данных
Заменяет значение NULL указанным замещающим значением.
Синтаксические обозначения в Transact-SQL
Синтаксис
ISNULL ( check_expression , replacement_value )
Аргументы
check_expression
Выражение, которое необходимо проверить на равенство значению NULL. Аргумент check_expression может быть любого типа.
replacement_value
Выражение, возвращаемое, если check_expression имеет значение NULL. Аргумент replacement_value должен иметь тип, который может быть неявно преобразован в тип check_expression.
Типы возвращаемых данных
Возвращает тип, совпадающий с типом выражения check_expression. Если в аргументе check_expression предоставлено литеральное значение NULL, возвращает тип данных replacement_value. Если в аргументе check_expression предоставлено литеральное значение NULL, а аргумент replacement_value не задан, возвращает int.
Remarks
Возвращается значение check_expression, если это выражение не равно NULL. В противном случае возвращается значение replacement_value. Если типы являются разными, то тип replacement_value неявно преобразуется в тип check_expression. Значение replacement_value может усекаться, если значение replacement_value длиннее, чем check_expression.
Примечание
Для возврата первого значения, отличного от NULL, используйте функцию COALESCE (Transact-SQL).
Примеры
A. Использование функции ISNULL с функцией AVG
Следующий пример демонстрирует расчет среднего значения веса всех продуктов. Все записи со значением NULL в столбце 50
таблицы Weight
заменяются значением Product
.
USE AdventureWorks2012;
GO
SELECT AVG(ISNULL(Weight, 50))
FROM Production.Product;
GO
Результирующий набор:
--------------------------
59.79
(1 row(s) affected)
Б. Использование функции ISNULL
Следующий пример производит выборку описания, процента скидки, минимального и максимального количества для всех специальных предложений из базы AdventureWorks2012
. Если максимальное количество для отдельного специального предложения равно NULL, отображаемое значение MaxQty
в результирующем наборе заменяется на 0. 00
.
USE AdventureWorks2012;
GO
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'
FROM Sales.SpecialOffer;
GO
Результирующий набор:
Description | DiscountPct | MinQty | Максимальное количество |
---|---|---|---|
Без скидки | 0,00 | 0 | 0 |
Оптовая скидка | 0,02 | 11 | 14 |
Оптовая скидка | 0,05 | 15 | 4 |
Оптовая скидка | 0,10 | 25 | 0 |
Оптовая скидка | 0,15 | 41 | 0 |
Оптовая скидка | 0,20 | 61 | 0 |
Mountain-100 Cl | 0,35 | 0 | 0 |
Sport Helmet Di | 0,10 | 0 | 0 |
Road-650 Overst | 0,30 | 0 | 0 |
Mountain Tire S | 0,50 | 0 | 0 |
Sport Helmet Di | 0,15 | 0 | 0 |
LL Road Frame S | 0,35 | 0 | 0 |
Touring-3000 Pr | 0,15 | 0 | 0 |
Touring-1000 Pr | 0,20 | 0 | 0 |
Half-Price Peda | 0,50 | 0 | 0 |
Mountain-500 Si | 0,40 | 0 | 0 |
(16 row(s) affected)
В.
Проверка значений NULL в предложении WHERE
Не используйте для поиска значений NULL выражение ISNULL, вместо него следует использовать выражение IS NULL. В следующем примере выполняется поиск всех продуктов, имеющих значение NULL
в столбце веса. Заметьте, что между словами IS
и NULL
стоит пробел.
USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
Примеры: Azure Synapse Analytics и Параллельное хранилище данных
Г. Использование функции ISNULL с функцией AVG
В приведенном ниже примере рассчитывается среднее значение веса всех продуктов в образце таблицы. Все записи со значением NULL в столбце 50
таблицы Weight
заменяются значением Product
.
-- Uses AdventureWorks
SELECT AVG(ISNULL(Weight, 50))
FROM dbo.DimProduct;
Результирующий набор:
--------------------------
52. 88
Д. Использование функции ISNULL
В приведенном ниже примере функция ISNULL используется для поиска значений NULL в столбце MinPaymentAmount
и отображения значения 0.00
для соответствующих строк.
-- Uses AdventureWorks
SELECT ResellerName,
ISNULL(MinPaymentAmount,0) AS MinimumPayment
FROM dbo.DimReseller
ORDER BY ResellerName;
Здесь приводится частичный результирующий набор.
ResellerName | MinimumPayment |
---|---|
A Bicycle Association | 0,0000 |
A Bike Store | 0,0000 |
A Cycle Shop | 0,0000 |
A Great Bicycle Company | 0,0000 |
A Typical Bike Shop | 200,0000 |
Acceptable Sales & Service | 0,0000 |
Е. Использование функции IS NULL для проверки на значение NULL в предложении WHERE
В приведенном ниже примере выполняется поиск всех продуктов, имеющих значение NULL
в столбце Weight
. Заметьте, что между словами IS
и NULL
стоит пробел.
-- Uses AdventureWorks
SELECT EnglishProductName, Weight
FROM dbo.DimProduct
WHERE Weight IS NULL;
См. также:
Выражения (Transact-SQL)
IS NULL (Transact-SQL)
Системные функции (Transact-SQL)
WHERE (Transact-SQL)
COALESCE (Transact-SQL)
Функции SQL ISNULL (), NVL (), IFNULL () и COALESCE ()
Функции SQL IFNULL (), ISNULL (), COALESCE () и NVL ()
Посмотрите на следующую таблицу «Продукты»:
P_Id | Название продукта | Цена за единицу | шт. На складе | шт. На заказ |
---|---|---|---|---|
1 | Ярлсберг | 10,45 | 16 | 15 |
2 | Маскарпоне | 32.56 | 23 | |
3 | Горгонзола | 15,67 | 9 | 20 |
Предположим, что столбец «UnitsOnOrder» является необязательным и может содержать значения NULL.
Посмотрите на следующий оператор SELECT:
ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
ОТ ПРОДУКТОВ;
В приведенном выше примере, если любое из значений «UnitsOnOrder» равно NULL, результат
будет NULL.
Решения
MySQL
Функция MySQL IFNULL ()
позволяет
вернуть альтернативное значение, если выражение NULL:
ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + IFNULL (UnitsOnOrder, 0))
ОТ ПРОДУКТОВ;
или мы можем использовать
, например:
COALESCE ()
ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + COALESCE (UnitsOnOrder, 0))
ОТ ПРОДУКТОВ;
SQL Server
SQL Server
позволяет
Функция ISNULL ()
вы возвращаете альтернативное значение, когда выражение NULL:
ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + ISNULL (UnitsOnOrder, 0))
ОТ ПРОДУКТОВ;
MS Access
MS Access
возвращает
Функция IsNull ()
ИСТИНА (-1), если выражение является нулевым значением, иначе ЛОЖЬ (0):
ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + IIF (IsNull (UnitsOnOrder), 0, UnitsOnOrder))
ОТ ПРОДУКТОВ;
Оракул
Функция Oracle NVL ()
дает тот же результат:
ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + NVL (UnitsOnOrder, 0))
ОТ ПРОДУКТОВ;
MySQL: IS NULL Условие
Это руководство по MySQL объясняет, как использовать условие MySQL IS NULL с синтаксисом и примерами.
Описание
Условие MySQL IS NULL используется для проверки значения NULL в операторах SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис MySQL условия IS NULL:
выражение IS NULL
Параметры или аргументы
- выражение
- Значение, которое нужно проверить, является ли оно значением NULL.
Примечание
- Если выражение имеет значение NULL, условие оценивается как ИСТИНА.
- Если выражение не является значением NULL, условие оценивается как FALSE.
Пример — с оператором SELECT
Давайте посмотрим на пример того, как использовать MySQL IS NULL в операторе SELECT:
ВЫБРАТЬ * ИЗ контактов ГДЕ last_name ЕСТЬ NULL;
Этот пример MySQL IS NULL вернет все записи из таблицы contacts , где last_name содержит значение NULL.
Пример — с оператором INSERT
Теперь давайте рассмотрим пример использования MySQL IS NULL в операторе INSERT:
ВСТАВИТЬ контакты (contact_id, contact_name) ВЫБЕРИТЕ account_no, supplier_name ОТ поставщиков WHERE category IS NULL;
Этот пример MySQL IS NULL будет вставлять записи в таблицу контактов , где категория содержит значение NULL.
Пример — с оператором UPDATE
Теперь давайте рассмотрим пример использования MySQL IS NULL в операторе UPDATE:
ОБНОВИТЬ контакты УСТАНОВИТЬ last_name = 'TBD' ГДЕ last_name ЕСТЬ NULL;
Этот пример MySQL IS NULL обновит записи в таблице contacts , где last_name содержит значение NULL.
Пример — с оператором DELETE
Теперь давайте рассмотрим пример использования MySQL IS NULL в операторе DELETE:
УДАЛИТЬ ИЗ контактов ГДЕ last_name ЕСТЬ NULL;
Этот пример MySQL IS NULL удалит все записи
из таблицы контактов , где last_name содержит значение NULL.
SQL Null-функции — ISNULL, IFNULL, Combine и NULLIF
В этом руководстве мы поймем необходимость и требования использования значений Null. Давайте теперь попробуем понять больше о нулевых значениях и нулевых функциях в SQL с примерами.
Что такое значения NULL в SQL?
Пустые значения — это заполнители в базе данных, когда у нас отсутствуют данные или требуемые данные недоступны.
Значение NULL не является частью какого-либо конкретного типа данных, это гибкий тип данных, который может быть помещен в столбец любого типа данных, будь то строка, int, blob или тип данных CLOB.
Нулевые значения пригодятся при очистке данных во время исследовательского анализа данных.
Нулевые значения помогают нам устранить неоднозначность, возникающую в данных. Кроме того, нулевые значения полезны для поддержания единого типа данных в столбце.
Пример : Представьте, что если пользователь по ошибке вводит дату рождения в столбец с номером мобильного телефона, то при необходимости установления контакта может возникнуть двусмысленность.
Чтобы преодолеть это, мы запускаем проверку данных перед вставкой и обновляем любые данные, которые не относятся к типу данных date, с нулевым значением.
Зачем нужны NULL-функции?
Нулевые функции необходимы для выполнения операций с нулевыми значениями, хранящимися в нашей базе данных. Мы можем выполнять функции со значениями NULL, которые явно распознают, является значение NULL или нет.
Используя эту способность распознавания, можно дополнительно выполнять операции с нулевыми значениями, такие как агрегатные функции в SQL. Вот некоторые из функций:
Старший номер | Функция | Описание |
1 | ISNULL () | Помогает нам заменить значения NULL на желаемое значение . |
2 | IFNULL () | Позволяет нам возвращать первое значение, если оно равно NULL, и в противном случае возвращает второе значение. |
3 | COALESCE () | Помогает нам вернуть первые ненулевые значения в аргументах. |
4 | NVL () | Помогает заменить значение NULL на желаемое значение, указанное пользователем. |
Демо-база данных
Давайте теперь посмотрим на нашу демонстрационную базу данных — «DataFlair»
Запрос:
SELECT * FROM DataFlair;
Выход:
Примеры
1. Давайте посмотрим на использование функции IFNULL ().
Синтаксис :
SELECT col1, col2, IFNULL (col3, value_to_be_replaced) FROM tableName;
Пример. Давайте посмотрим на опыт каждого сотрудника в DataFlair и заменим значение NULL на 0 лет опыта.
Запрос :
SELECT emp_id, name, IFNULL (опыт, 0) FROM DataFlair;
Выход :
Здесь мы видим, что все значения, соответствующие NULL, автоматически заменяются на 0.
2. Давайте посмотрим на использование функции ISNULL ().
Синтаксис :
SELECT col1, col2, ISNULL (col3) FROM tableName;
Пример: давайте теперь проверим, является ли опыт каждого сотрудника в DataFlair NULL или нет.
Запрос :
SELECT emp_id, name, ISNULL (опыт) FROM DataFlair;
Выход :
Здесь мы видим, что значения NULL преобразуются в 0, а значения, отличные от NULL, преобразуются в 1.
3. Давайте посмотрим на использование функции COALESCE ().
Синтаксис :
SELECT col1, col2, COALESCE (col3, value_to_be_replaced) FROM tableName;
Пример. Давайте посмотрим на опыт каждого сотрудника в DataFlair и заменим значение NULL на 0 лет опыта с помощью функции COALESCE ().
Запрос :
SELECT emp_id, name, COALESCE (опыт, 0) FROM DataFlair;
Выход :
Здесь значения NULL преобразуются в 0, поскольку мы попросили функцию преобразовать значения NULL в 0.
4. Давайте посмотрим на использование функции NVL ().
Синтаксис :
ВЫБРАТЬ col1, col2, NVL (col3) FROM tableName;
Пример: давайте теперь проверим, является ли опыт каждого сотрудника в DataFlair NULL или нет, используя функцию NVL.
Запрос :
SELECT emp_id, name, NVL (опыт) FROM DataFlair;
Выход :
Здесь мы видим, что ненулевые значения представлены как 1, а нулевые значения представлены как 0.
Резюме
В этом руководстве мы увидели, что такое значения NULL и почему нам нужно использовать значения NULL.
Мы видели, что использование значений NULL элементарно для базы данных и сделано для поддержания целостности базы данных. После этого мы узнали о различных функциях, которые можно запускать со значениями NULL.
Также обсуждаются некоторые из основных функций, таких как IFNULL (), ISNULL (), COALESCE () и NVL (), которые работают со значениями NULL.
Мы разобрались в использовании и синтаксисе с помощью примеров для каждой функции.
Если вы довольны DataFlair, не забудьте порадовать нас своим положительным отзывом в Google | Facebook
Функция NVL — заменить NULL — миграция Oracle на SQL Server
В Oracle функция NVL ( exp1 , exp2 ) принимает 2 выражения (параметра) и возвращает первое выражение, если оно равно , а не NULL, в противном случае
NVL возвращает второе выражение.
В SQL Server вы можете использовать функцию ISNULL ( exp1 , exp2 ).
Oracle Пример:
- Возвращает 'N / A', если имя NULL ВЫБРАТЬ NVL (имя, 'N / A') ИЗ страны;
Пример SQL Server:
- Возвращает 'N / A', если имя NULL ВЫБРАТЬ ISNULL (имя, 'Н / Д') ИЗ страны;
Сводка преобразования Oracle NULL в SQL Server:
Oracle | SQL Server | ||
Синтаксис | NULL ( exp1 , exp2 ) | ISNULL ( exp1 , exp2 ) | |
Альтернативы | CASE | CASE | Соответствие ANSI SQL |
COALESCE | COALESCE | ||
NVL2 | IIF | Начиная с SQL Server 2012 |
Последнее обновление : Oracle 11g R2 и Microsoft SQL Server 2012
В Oracle функция NVL используется для замены NULL указанным значением и может быть преобразована в функцию ISNULL в SQL Server.
Обратите внимание: если вы хотите, чтобы ваше приложение поддерживало базы данных Oracle и SQL Server, вы можете использовать ANSI SQL-совместимый CASE.
выражение или функция COALESCE, которые поддерживаются как Oracle, так и SQL Server:
Оракул :
- Возвращает 'N / A', если имя NULL ВЫБРАТЬ NVL (имя, 'N / A') ИЗ страны; - Тот же результат с использованием выражения CASE ВЫБЕРИТЕ СЛУЧАЙ, КОГДА name IS NULL THEN 'N / A' ELSE name END FROM countries; - Использование COALESCE ВЫБЕРИТЕ COALESCE (имя, 'Н / Д') ИЗ страны;
SQL Server :
- Возвращает 'N / A', если имя NULL ВЫБРАТЬ ISNULL (имя, 'Н / Д') ИЗ страны; - Тот же результат с использованием выражения CASE ВЫБЕРИТЕ СЛУЧАЙ, КОГДА name IS NULL THEN 'N / A' ELSE name END FROM countries; - Использование COALESCE ВЫБЕРИТЕ COALESCE (имя, 'Н / Д') ИЗ страны;
Кроме того, вы можете использовать функцию Oracle NVL2 и SQL Server IIF (доступна с SQL Server 2012):
Оракул :
- Возвращает 'N / A', если имя NULL ВЫБРАТЬ NVL2 (имя, имя, 'Н / Д') ИЗ страны;
SQL Server 2012 или более поздняя версия :
- Возвращает 'N / A', если имя NULL ВЫБРАТЬ IIF (имя ЕСТЬ NULL, «Н / Д», имя) ИЗ страны;
Справочник по языку SQL для Oracle 11g R2
Microsoft SQL Server 2012 — электронная документация
SQLines предлагает услуги по преобразованию баз данных и приложений из Oracle в Microsoft SQL Server. Для получения более подробной информации, пожалуйста, свяжитесь с нами.
Использование ISNULL в SQL Server для замены значений NULL
Существуют разные способы обработки значений NULL, и я писал об одном из них в моем последнем посте. В этом посте мы рассмотрим SQL ISNULL () и, в частности, версию SQL Server. В MySQL есть эта функция, но она ведет себя немного иначе, поскольку возвращает логическое значение.
Давайте посмотрим на синтаксис
ISNULL (контрольное_выражение, значение_замещения)
check_expression — это выражение, которое нужно проверить.Это может быть любой тип данных.
replace_value — это значение, на которое нужно заменить NULL. Это тоже может быть поле.
Возвращаемый тип данных зависит от типа данных check_expression. Передайте здесь поле varchar, и будет возвращен varchar. Здесь ISNULL () вернет varchar, даже если в replace_value передано целочисленное значение. Однако есть исключения, поскольку значение replace_value должно иметь тип данных, который может быть неявно преобразован в тот же тип данных, что и check_expression.
Если check_expression имеет значение NULL, то возвращаемый тип данных будет тем типом данных, который указан как значение replace_value
Рассмотрим пример.
ВЫБРАТЬ Домашний телефон ОТ ведет;
Итак, это данные с некоторыми NULL в строках 2 и 3. Теперь мы применим ISNULL (), чтобы вернуть дефис вместо NULL.
ВЫБРАТЬ ISNULL (домашний телефон, '-') КАК телефон ОТ ведет;
Если мы теперь передадим целое число как значение replace_value, код все равно будет работать нормально, потому что целое число может быть неявно преобразовано в varchar.
ВЫБРАТЬ ISNULL (домашний телефон, 1) КАК телефон ОТ ведет;
Так что это нормально работает. Лично, если бы я писал этот код, я бы неявно преобразовал его в SQL. На мой взгляд, это лучше, потому что ясно, какой тип данных возвращается.
ВЫБРАТЬ ISNULL (HomePhone, CAST (1 AS VARCHAR)) AS Phone ОТ ведет;
Я бы написал это точно так же, если бы значение replace_value было полем, по той же причине.
ВЫБРАТЬ ISNULL (HomePhone, CAST (ReplacementField AS VARCHAR)) AS Phone FROM....
SQL ISNULL | Учебное пособие по SQL — Изучение SQL в Интернете
Функция SQL ISNULL имеет разное значение в разных базах данных. В MS SQL Server ISNULL используется для замены значения NULL, в то время как в MySQL ISNULL используется для определения, является ли выражение NULL или нет.
SQL Server
В SQL Server функция SQL ISNULL используется для замены значения NULL альтернативным значением. То же самое с функцией SQL NVL в Oracle или функцией SQL IFNULL в mySQL.
Функция SQL ISNULL в синтаксисе MS SQL Server
ISNULL (ехр1; ехр2)
Если exp1 имеет значение NULL, функция ISNULL вернет exp2, в противном случае она вернет exp1.
Функция SQL ISNULL в примере MS SQL Server
Стол: Сотрудников
ID | EmpName |
---|---|
001 | Juiaaa |
002 | Hiooi |
003 | НУЛЬ |
004 | Qiak |
ВЫБЕРИТЕ ID, ISNULL (EmpName, 'N / A') AS EmpName ОТ сотрудников
Результат будет выглядеть так:
ID | EmpName |
---|---|
001 | Juiaaa |
002 | Hiooi |
003 | НЕТ |
004 | Qiak |
MySQL
В MySQL функция SQL ISNULL используется, чтобы определить, является ли выражение NULL или нет.
Функция SQL ISNULL в синтаксисе MySQL
ISNULL (exp1)
Если exp1 имеет значение NULL, функция ISNULL вернет 1, в противном случае она вернет 0.
Функция SQL ISNULL в примере MySQL
Стол: Сотрудников
ID | EmpName |
---|---|
001 | Juiaaa |
002 | Hiooi |
003 | НУЛЬ |
004 | Qiak |
ВЫБЕРИТЕ ID, ISNULL (EmpName) КАК NoName ОТ сотрудников
Результат будет выглядеть так:
ID | NoName |
---|---|
001 | 0 |
002 | 0 |
003 | 1 |
004 | 0 |
Эта запись была опубликована в разделе Функции SQL автором admin.
Функции SQL ISNULL (), NVL (), IFNULL () и COALESCE () — лучшие интерактивные учебные пособия | Исходные коды
Взгляните на следующую таблицу «Продукты»:P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder | ||||||
---|---|---|---|---|---|---|---|---|---|---|
1 | Jarlsberg | 1522 | 10.45 | Jarlsberg | Маскарпоне | 32.56 | 23 | |||
3 | Горгонзола | 15,67 | 9 | 20 |
Предположим, что столбец «UnitsOnOrder» является необязательным и может содержать значения NULL.
У нас есть следующий оператор SELECT:
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder) FROM Products |
В приведенном выше примере, если любое из значений «UnitsOnOrder» равно NULL, результатом будет NULL.
Функция Microsoft ISNULL () используется, чтобы указать, как мы хотим обрабатывать значения NULL.
Функции NVL (), IFNULL () и COALESCE () также можно использовать для достижения того же результата.
В этом случае мы хотим, чтобы значения NULL были равны нулю.
Ниже, если «UnitsOnOrder» имеет значение NULL, это не повредит расчету, поскольку ISNULL () возвращает ноль, если значение NULL:
SQL Server / MS Access
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL (UnitsOnOrder, 0)) ИЗ продуктов |
Oracle
Oracle не имеет функции ISNULL ().Однако мы можем использовать функцию NVL () для достижения того же результата:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL (UnitsOnOrder, 0)) FROM Products |
MySQL
MySQL имеет функцию ISNULL (). Однако она работает немного иначе, чем функция Microsoft ISNULL ().
В MySQL мы можем использовать функцию IFNULL (), например:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL (UnitsOnOrder, 0)) FROM Products |
или мы можем использовать функцию COALESCE (), например:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE (UnitsOnOrder, 0)) FROM Products |
.