Mysql

Mysql isnull: SQL ISNULL(), NVL(), IFNULL() and COALESCE() Functions

Содержание

База Данных MySQL NULL Функции


SQL IFNULL(), ISNULL(), COALESCE(), И NVL() Функции

Посмотрите на следующую таблицу «Products»:

P_IdProductNameUnitPriceUnitsInStockUnitsOnOrder
1Jarlsberg10.451615
2Mascarpone32.5623 
3Gorgonzola15.67920

Предположим, что столбец «унитсонордер» является необязательным и может содержать значения 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  

Результирующий набор:

DescriptionDiscountPctMinQtyМаксимальное количество
Без скидки0,0000
Оптовая скидка0,021114
Оптовая скидка0,05154
Оптовая скидка0,10250
Оптовая скидка0,15410
Оптовая скидка0,20610
Mountain-100 Cl0,3500
Sport Helmet Di0,1000
Road-650 Overst0,3000
Mountain Tire S0,5000
Sport Helmet Di0,1500
LL Road Frame S0,3500
Touring-3000 Pr0,1500
Touring-1000 Pr0,2000
Half-Price Peda0,5000
Mountain-500 Si0,4000

(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;  
  

Здесь приводится частичный результирующий набор.

ResellerNameMinimumPayment
A Bicycle Association0,0000
A Bike Store0,0000
A Cycle Shop0,0000
A Great Bicycle Company0,0000
A Typical Bike Shop200,0000
Acceptable Sales & Service0,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 () — лучшие интерактивные учебные пособия | Исходные коды

Взгляните на следующую таблицу «Продукты»:

922

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 

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *