Разное

Ms sql isnull: Функция ISNULL (Transact-SQL) — SQL Server

Содержание

Функция ISNULL (Transact-SQL) — SQL Server



  • Чтение занимает 3 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse

Заменяет значение NULL указанным замещающим значением.Replaces NULL with the specified replacement value.

Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions

СинтаксисSyntax

ISNULL ( check_expression , replacement_value )  

АргументыArguments

check_expressioncheck_expression
Выражение, которое необходимо проверить на равенство значению NULL.Is the expression to be checked for NULL. Аргумент check_expression может быть любого типа.check_expression can be of any type.

replacement_valuereplacement_value
Выражение, возвращаемое, если check_expression имеет значение NULL.Is the expression to be returned if check_expression is NULL. Аргумент replacement_value должен иметь тип, который может быть неявно преобразован в тип check_expression.replacement_value must be of a type that is implicitly convertible to the type of check_expression.

Типы возвращаемых данныхReturn Types

Возвращает тип, совпадающий с типом выражения check_expression.Returns the same type as check_expression. Если в аргументе check_expression предоставлено литеральное значение NULL, возвращает тип данных replacement_value.If a literal NULL is provided as check_expression, returns the datatype of the replacement_value. Если в аргументе check_expression предоставлено литеральное значение NULL, а аргумент replacement_value не задан, возвращает int.If a literal NULL is provided as check_expression and no replacement_value is provided, returns an int.

RemarksRemarks

Возвращается значение check_expression, если это выражение не равно NULL. В противном случае возвращается значение replacement_value. Если типы являются разными, то тип replacement_value неявно преобразуется в тип check_expression.The value of check_expression is returned if it is not NULL; otherwise, replacement_value is returned after it is implicitly converted to the type of check_expression, if the types are different. Значение replacement_value может усекаться, если значение replacement_value длиннее, чем check_expression.replacement_value can be truncated if replacement_value is longer than check_expression.

Примечание

Для возврата первого значения, отличного от NULL, используйте функцию COALESCE (Transact-SQL).Use COALESCE (Transact-SQL) to return the first non-null value.

ПримерыExamples

A.A. Использование функции ISNULL с функцией AVGUsing ISNULL with AVG

Следующий пример демонстрирует расчет среднего значения веса всех продуктов.The following example finds the average of the weight of all products. Все записи со значением NULL в столбце 50 таблицы Weight заменяются значением Product.It substitutes the value 50 for all NULL entries in the Weight column of the Product table.

USE AdventureWorks2012;  
GO  
SELECT AVG(ISNULL(Weight, 50))  
FROM Production.Product;  
GO  

Результирующий набор:Here is the result set.

-------------------------- 
59.79  
 
(1 row(s) affected)

Б.B. Использование функции ISNULLUsing ISNULL

Следующий пример производит выборку описания, процента скидки, минимального и максимального количества для всех специальных предложений из базы AdventureWorks2012.The following example selects the description, discount percentage, minimum quantity, and maximum quantity for all special offers in AdventureWorks2012. Если максимальное количество для отдельного специального предложения равно NULL, отображаемое значение MaxQty в результирующем наборе заменяется на 0.00.If the maximum quantity for a particular special offer is NULL, the MaxQty shown in the result set is 0.00.

USE AdventureWorks2012;  
GO  
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'  
FROM Sales.SpecialOffer;  
GO  

Результирующий набор:Here is the result set.

DescriptionDescriptionDiscountPctDiscountPctMinQtyMinQtyМаксимальное количествоMax Quantity
Без скидкиNo Discount0,000.000000
Оптовая скидкаVolume Discount0,020.0211111414
Оптовая скидкаVolume Discount0,050.05151544
Оптовая скидкаVolume Discount0,100.10252500
Оптовая скидкаVolume Discount0,150.15414100
Оптовая скидкаVolume Discount0,200.20616100
Mountain-100 ClMountain-100 Cl0,350.350000
Sport Helmet DiSport Helmet Di0,100.100000
Road-650 OverstRoad-650 Overst0,300.300000
Mountain Tire SMountain Tire S0,500.500000
Sport Helmet DiSport Helmet Di0,150.150000
LL Road Frame SLL Road Frame S0,350.350000
Touring-3000 PrTouring-3000 Pr0,150.150000
Touring-1000 PrTouring-1000 Pr0,200.200000
Half-Price PedaHalf-Price Peda0,500.500000
Mountain-500 SiMountain-500 Si0,400.400000

(16 row(s) affected)

В.C. Проверка значений NULL в предложении WHERETesting for NULL in a WHERE clause

Не используйте для поиска значений NULL выражение ISNULL,Do not use ISNULL to find NULL values. вместо него следует использовать выражение IS NULL.Use IS NULL instead. В следующем примере выполняется поиск всех продуктов, имеющих значение NULL в столбце веса.The following example finds all products that have NULL in the weight column. Заметьте, что между словами IS и NULL стоит пробел.Note the space between IS and NULL.

USE AdventureWorks2012;  
GO  
SELECT Name, Weight  
FROM Production.Product  
WHERE Weight IS NULL;  
GO  

Примеры: Azure Synapse AnalyticsAzure Synapse Analytics и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Параллельное хранилище данныхParallel Data Warehouse

Г.D. Использование функции ISNULL с функцией AVGUsing ISNULL with AVG

В приведенном ниже примере рассчитывается среднее значение веса всех продуктов в образце таблицы.The following example finds the average of the weight of all products in a sample table. Все записи со значением NULL в столбце 50 таблицы Weight заменяются значением Product.It substitutes the value 50 for all NULL entries in the Weight column of the Product table.

-- Uses AdventureWorks  
  
SELECT AVG(ISNULL(Weight, 50))  
FROM dbo.DimProduct;  

Результирующий набор:Here is the result set.

--------------------------   
52.88   

Д.E. Использование функции ISNULLUsing ISNULL

В приведенном ниже примере функция ISNULL используется для поиска значений NULL в столбце MinPaymentAmount и отображения значения 0.00 для соответствующих строк.The following example uses ISNULL to test for NULL values in the column MinPaymentAmount and display the value 0.00 for those rows.

-- Uses AdventureWorks  
  
SELECT ResellerName,   
       ISNULL(MinPaymentAmount,0) AS MinimumPayment  
FROM dbo.DimReseller  
ORDER BY ResellerName;  
  

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

ResellerNameResellerNameMinimumPaymentMinimumPayment
A Bicycle AssociationA Bicycle Association0,00000.0000
A Bike StoreA Bike Store0,00000.0000
A Cycle ShopA Cycle Shop0,00000.0000
A Great Bicycle CompanyA Great Bicycle Company0,00000.0000
A Typical Bike ShopA Typical Bike Shop200,0000200.0000
Acceptable Sales & ServiceAcceptable Sales & Service0,00000.0000

Е.F. Использование функции IS NULL для проверки на значение NULL в предложении WHEREUsing IS NULL to test for NULL in a WHERE clause

В приведенном ниже примере выполняется поиск всех продуктов, имеющих значение NULL в столбце Weight.The following example finds all products that have NULL in the Weight column. Заметьте, что между словами IS и NULL стоит пробел.Note the space between IS and NULL.

-- Uses AdventureWorks  
  
SELECT EnglishProductName, Weight  
FROM dbo.DimProduct  
WHERE Weight IS NULL;  

См. также:See Also

Выражения (Transact-SQL) Expressions (Transact-SQL)
IS NULL (Transact-SQL) IS NULL (Transact-SQL)
Системные функции (Transact-SQL) System Functions (Transact-SQL)
WHERE (Transact-SQL) WHERE (Transact-SQL)
COALESCE (Transact-SQL)COALESCE (Transact-SQL)



IS NULL (Transact-SQL) — SQL Server



  • Чтение занимает 2 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse

Определяет, может ли указанное выражение быть NULL.Determines whether a specified expression is NULL.

Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions

СинтаксисSyntax

expression IS [ NOT ] NULL  

АргументыArguments

expressionexpression
Любое допустимое выражение expression.Is any valid expression.

NOTNOT
Задает отрицание логического результата.Specifies that the Boolean result be negated. Предикат меняет возвращаемые выражением значения на обратные, возвращая TRUE, если значение не равно NULL и FALSE, если значение равно NULL.The predicate reverses its return values, returning TRUE if the value is not NULL, and FALSE if the value is NULL.

Типы результатаResult Types

BooleanBoolean

Значения кода возвратаReturn Code Values

Если значение expression равно NULL, IS NULL возвращает TRUE; в противном случае возвращается значение FALSE.If the value of expression is NULL, IS NULL returns TRUE; otherwise, it returns FALSE.

Если значение expression равно NULL, IS NOT NULL возвращает FALSE; в противном случае возвращается значение TRUE.If the value of expression is NULL, IS NOT NULL returns FALSE; otherwise, it returns TRUE.

ПримечанияRemarks

Для определения, имеет ли выражение значение NULL, используйте IS NULL или IS NOT NULL вместо сравнения операторов (например = или !=).To determine whether an expression is NULL, use IS NULL or IS NOT NULL instead of comparison operators (such as = or !=). Сравнение операторов возвращает UNKNOWN, если хотя бы один аргумент или они оба равны NULL.Comparison operators return UNKNOWN when either or both arguments are NULL.

ПримерыExamples

В следующем примере возвращается наименование и вес всех продуктов, для которых вес меньше 10 фунтов, или неизвестен цвет, либо NULL.The following example returns the name and the weight for all products for which either the weight is less than 10 pounds or the color is unknown, or NULL.

USE AdventureWorks2012;  
GO  
SELECT Name, Weight, Color  
FROM Production.Product  
WHERE Weight < 10.00 OR Color IS NULL  
ORDER BY Name;  
GO  

Примеры: Azure Synapse AnalyticsAzure Synapse Analytics и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Параллельное хранилище данныхParallel Data Warehouse

В следующем примере возвращаются полные имена всех сотрудников с инициалами отчества.The following example returns the full names of all employees with middle initials.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, MiddleName  
FROM DIMEmployee  
WHERE MiddleName IS NOT NULL  
ORDER BY LastName DESC;  

См. также:See Also

CASE (Transact-SQL) CASE (Transact-SQL)
CREATE PROCEDURE (Transact-SQL) CREATE PROCEDURE (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
Типы данных (Transact-SQL) Data Types (Transact-SQL)
Выражения (Transact-SQL) Expressions (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
LIKE (Transact-SQL) LIKE (Transact-SQL)
Операторы (Transact-SQL) Operators (Transact-SQL)
Логические операторы (Transact-SQL) Logical Operators (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)



Ничего не найдено для Obucheniest 489 Coalesce Isnull In T Sql %23Coalesce






Программирование


Здравствуйте, прежде чем ответить на вопрос «Какой язык программирования лучше выбрать для начинающего?», Вы


Инструкции и советы


Собираясь арендовать хостинг, нужно разобраться в том, какие виды существуют, в чем преимущества и


Другое


Всем привет! Сегодня мы поговорим о компаниях, которые предоставляют услуги хостинга для сайтов в


Программирование


Приветствую Вас на сайте Info-Comp.ru! В этом материале представлен список самых популярных и востребованных


Новости


Здравствуйте, уважаемые посетители сайта Info-Comp.ru! Мне хочется поздравить Вас с наступающим новым 2021 годом,


Microsoft SQL Server


Иногда у программиста, который разрабатывает SQL инструкцию или какую-нибудь процедуру, возникает необходимость узнать количество

Ничего не найдено для Obucheniest 489 Coalesce Isnull In T Sql %23Sravnenie Coalesce I Isnull Ih Osnovnye Otlichiya


Windows


Всем привет! Если по каким либо причинам у Вас отключено автоматическое обновление в Windows


Новости


Состоялся релиз дистрибутива Linux Ubuntu 19.04, включая официальные производные: Kubuntu, Lubuntu, Xubuntu, Ubuntu Budgie,


Linux


В данной статье мы с Вами рассмотрим возможность программы VirtualBox пробрасывать порты в гостевую


Microsoft SQL Server


В данном материале мы рассмотрим возможность перемещения файлов базы данных Microsoft SQL Server на


Новости


Компания Google в конце 2018 года объявила о том, что социальная сеть Google+ в


Windows


В данной статье мы поговорим о такой распространенной проблеме в Интернете как вирусы, которые

Переход через NULL / Хабр

Многие знают и используют встроенную функцию ISNULL(X, Y), которая заменяет первый аргумент на второй в случае, если он (первый) NULL. Менее употребима обратная встроенная функция NULLIF(X, Y), которая возвращает NULL, если первый аргумент равен второму. Комбинация этих двух функций позволяет избежать использования конструкций IF-ELSE или CASE-WHEN, что делает код компактнее. Если интересно посмотреть пару примеров — добро пожаловать под кат.

Например, вот код, который выводит 10 случайных целых чисел в диапазоне от 1 до 37, и ближайшее большее или равное выведенному числу значение, кратное 6.

SELECT
	Q.Src,
	CASE 
          WHEN Q.Src % 6 = 0 THEN Q.Src 
          ELSE Q.Src + (6 - Q.Src % 6) 
        END AS NextTimes6
FROM (
	SELECT TOP 10 
		CONVERT(INT, 1 + 37 * RAND(CHECKSUM(NEWID()))) Src
	FROM SYSOBJECTS S
) Q

От CASE..WHEN можно избавиться, проделав следующий трюк — обратив в NULL результат выражения Q.Src % 6 в случае, если остаток равен 0, зная, что результат любой операции с NULL равен NULL, и восстанавливая затем обратно NULL до 0 внешней функцией ISNULL:

SELECT
	Q.Src,
	Q.Src + ISNULL(6 - NULLIF(Q.Src % 6, 0), 0) AS NextTimes6
FROM (
	SELECT TOP 10 
		CONVERT(INT, 1 + 37 * RAND(CHECKSUM(NEWID()))) Src
	FROM SYSOBJECTS S
) Q


Еще один пример — разделение строки на две части по пробелу (например, имени из строки ИмяФамилия. Типичная проблема здесь при решении «в лоб» — падение функции LEFT при передаче ей аргумента -1 в качестве значения количества отрезаемых символов в случае, когда пробела в исходной строке не находится (CHARINDEX возвращает 0):

SELECT
	Q.Src,
	CASE
	  WHEN CHARINDEX(' ', Q.Src) > 0 THEN LEFT(Q.Src, CHARINDEX(' ', Q.Src) - 1)
	  ELSE Q.Src
    END AS NameOnly
FROM (
	SELECT N'Петр Иванов' AS Src
	UNION ALL
	SELECT N'Иван'
) Q

Превращается в:

SELECT
	Q.Src,
	LEFT(Q.Src, ISNULL(NULLIF(CHARINDEX(' ', Q.Src), 0) - 1, LEN(Q.Src))) AS NameOnly
FROM (
	SELECT N'Петр Иванов' AS Src
	UNION ALL
	SELECT N'Иван'
) Q

Приятного SQL-программирования!

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

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

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





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

Если «UnitsOnOrder» не является обязательным, и может содержать NULL значения.

Мы используем следующую ЗЕЬЕСТ:


SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)

FROM Products

В приведенном выше примере, если есть «UnitsOnOrder» значение NULL, то результат равен NULL.

функция от Microsoft ISNULL () используется для указания того, как обрабатывать NULL значения.

Функция NVL (), IFNULL () и COALESCE () также может достичь тех же результатов.

Здесь, мы надеемся, что NULL значение равно 0.

Теперь, если «UnitsOnOrder» является NULL, это не повлияет на расчет, потому что если значение равно NULL, ISNULL () возвращает 0:

SQL Server / MS Access


SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))

FROM Products

оракул

Oracle не IsNull функцию (). Тем не менее, мы можем использовать функцию NVL (), чтобы достичь того же результата:


SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))

FROM Products

MySQL

MySQL также имеет аналогичную функцию ISNULL (). Но он работает с ISNULL от Microsoft () функция немного отличается.

В MySQL, мы можем использовать функцию IFNULL () следующим образом:


SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))

FROM Products

Или же мы можем использовать функцию COALESCE () следующим образом:


SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))

FROM Products

Проверка отсутствия/наличия значения. Предикат IS NULL. Справка по SQL

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








Проверка наличия звуковой системы



Проверка наличия звуковой системы
Проверка наличия звуковой системы заключается в том, чтобы отследить, способен ли ваш компьютер:? воспроизводить звук;? записывать звук.К специальному устройству для воспроизведения и записи звука относится звуковая плата.Для проверки






11.2.1. Проверка наличия средств локализации



11.2.1. Проверка наличия средств локализации
Современные дистрибутивы Linux (а тем более русифицированные) по умолчанию содержат системные средства локализации, перечисленные в предыдущем разделе.Чтобы убедиться в этом, проверьте, что у вас имеются каталоги /usr/share/locale/* и






26.5.5. Проверка наличия сообщения в очереди



26.5.5. Проверка наличия сообщения в очереди
Наверное, вы не хотите, чтобы ваша программа ждала, пока в очереди появится нужное сообщение. Используя особенности системного вызова msgrcv(), можно написать код проверки наличия сообщения определенного типа в очереди. Напишем






Проверка попадания в диапазон. Предикат BETWEEN.



Проверка попадания в диапазон. Предикат BETWEEN.
Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND. Естественно, как и для предиката сравнения, выражения в предикате BETWEEN






2. Неопределенные значения ( Null-значения)



2. Неопределенные значения (Null-значения)
Слово Null используется для обозначения неопределенных значений в базах данных.Чтобы лучше понять, какие значения понимаются под неопределенными, рассмотрим таблицу, являющуюся фрагментом базы данных:

Итак, неопределенное






4. Null-значения и логические операции



4. Null-значения и логические операции
Обычно в системах управления базами данных непосредственно поддерживаются только три логические операции: отрицание ¬, конъюнкция &amp; и дизъюнкция ?. Операции следования ? и равносильности ? выражаются через них с помощью






5. Null-значения и проверка условий



5. Null-значения и проверка условий
Итак, из всего вышесказанного можно сделать вывод, что в логике систем управления базами данных имеются не два логических значения (True и False), а три, ведь Null-значение также рассматривается как одно из возможных логических значений. Именно






Предикат IS [NOT] NULL



Предикат IS [NOT] NULL
IS NULL и его противоположность IS NOT NULL являются парой предикатов, которые не используют группирование. Поскольку NULL не является значением, эти операторы не являются операторами сравнения. Они проверяют утверждение, что объект в левой части имеет значение (IS






Установка значения в NULL



Установка значения в NULL
Элемент данных может быть сделан NULL только в столбце, для которого не указано ограничение NOT NULL (СМ. разд. «Ограничение NOT NULL» главы 16).В операторе UPDATE символом назначения является «=»:UPDATE FOO SET COL3 = NULLWHERE COL2 = 4;В операторе INSERT передавайте ключевое слово NULL














ISNULL (Transact-SQL) — SQL Server

  • 3 минуты на чтение

В этой статье

Применимо к: SQL Server (все поддерживаемые версии) База данных SQL AzureAzure SQL Managed InstanceAzure Synapse Analytics Хранилище параллельных данных

Заменяет NULL указанным значением замены.

Соглашения о синтаксисе Transact-SQL

Синтаксис

  ISNULL (контрольное_выражение, значение_замещения)
  

Аргументы

check_expression
Проверяется ли выражение на NULL. check_expression может быть любого типа.

значение_замены
Выражение, которое должно быть возвращено, если check_expression имеет значение NULL. значение_замещения должно быть типа, который неявно преобразуется в тип check_expression .

Типы возврата

Возвращает тот же тип, что и check_expression . Если буквальный NULL предоставлен как check_expression , возвращает тип данных replacement_value .Если литерал NULL предоставляется как check_expression и не указано значение replace_value , возвращается int .

Замечания

Значение check_expression возвращается, если оно не равно NULL; в противном случае, после неявного преобразования в тип check_expression возвращается значение_замещения , если типы различаются. значение_замещения может быть усечено, если значение значение_замещения больше, чем контрольное_выражение .

Примеры

A. Использование ISNULL с AVG

В следующем примере вычисляется среднее значение веса всех продуктов. Он заменяет значение 50 на все записи NULL в столбце Weight таблицы Product .

  ЕГЭ AdventureWorks2012;
ИДТИ
ВЫБРАТЬ СРЕДНЕЕ (ISNULL (Вес, 50))
ОТ Производство.Продукт;
ИДТИ
  

Вот результат.

  --------------------------
59,79
 
(Затронута 1 строка (и))
  

Б.Использование ISNULL

В следующем примере выбирается описание, процент скидки, минимальное и максимальное количество для всех специальных предложений в AdventureWorks2012 . Если максимальное количество для конкретного специального предложения равно NULL, значение MaxQty , отображаемое в наборе результатов, будет равно 0,00 .

  ЕГЭ AdventureWorks2012;
ИДТИ
ВЫБЕРИТЕ Описание, DiscountPct, MinQty, ISNULL (MaxQty, 0,00) КАК «Максимальное количество»
ОТ Sales.SpecialOffer;
ИДТИ
  

Вот результат.

Описание DiscountPct Мин. Количество Максимальное количество
Без скидки 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
Спортивный шлем Di 0,10 0 0
Дорога-650 Overst 0,30 0 0
Горная шина S 0,50 0 0
Спортивный шлем Di 0.15 0 0
LL Дорожная рама S 0,35 0 0
Туринг-3000 Пр 0,15 0 0
Туринг-1000 Пр 0,20 0 0
Peda за полцены 0,50 0 0
Гора-500 Si 0,40 0 0

(затронуты 16 строк)

С.Проверка на NULL в предложении WHERE

Не используйте ISNULL для поиска значений NULL. Вместо этого используйте IS NULL. В следующем примере выполняется поиск всех продуктов, для которых в столбце веса указано NULL . Обратите внимание на пробел между IS и NULL .

  ЕГЭ AdventureWorks2012;
ИДТИ
ВЫБЕРИТЕ Имя, Вес
ОТ ПРОИЗВОДСТВА.
ГДЕ Weight IS NULL;
ИДТИ
  

Примеры: Azure Synapse Analytics и хранилище параллельных данных

D. Использование ISNULL с AVG

В следующем примере выполняется поиск среднего веса всех продуктов в таблице-образце.Он заменяет значение 50 на все записи NULL в столбце Weight таблицы Product .

  - использует AdventureWorks
  
ВЫБРАТЬ СРЕДНЕЕ (ISNULL (Вес, 50))
ОТ dbo.DimProduct;
  

Вот результат.

  --------------------------
52,88
  

E. Использование ISNULL

В следующем примере ISNULL используется для проверки значений NULL в столбце MinPaymentAmount и отображения значения 0.00 для этих строк.

  - использует AdventureWorks
  
ВЫБЕРИТЕ ResellerName,
       ISNULL (MinPaymentAmount, 0) как MinimumPayment
ОТ dbo.DimReseller
ЗАКАЗАТЬ ПО ResellerName;
  
  

Вот частичный набор результатов.

ResellerName Минимальная сумма платежа
Ассоциация велосипедистов 0,0000
Веломагазин 0,0000
Цех цикла 0.0000
Великая велосипедная компания 0,0000
Типичный магазин велосипедов 200,0000
Приемлемые продажи и обслуживание 0,0000

F. Использование IS NULL для проверки наличия NULL в предложении WHERE

В следующем примере выполняется поиск всех продуктов, у которых NULL в столбце Weight . Обратите внимание на пробел между IS и NULL .

  - использует AdventureWorks
  
ВЫБЕРИТЕ EnglishProductName, Weight
ОТ dbo.DimProduct
ГДЕ Weight IS NULL;
  

См. Также

Выражения (Transact-SQL)
IS NULL (Transact-SQL)
Системные функции (Transact-SQL)
WHERE (Transact-SQL)
COALESCE (Transact-SQL)

Как заменить NULL другим значением в SQL Server — ISNULL ()

При запросе к базе данных SQL Server могут быть случаи, когда вы не хотите, чтобы в наборе результатов возвращались нулевые значения. И могут быть случаи, когда вы действительно хотите, чтобы они вернулись.Но также могут быть случаи, когда вы действительно хотите, чтобы они возвращались, но как другое значение.

Для этого и предназначена функция ISNULL () .

ISNULL () — это функция T-SQL, которая позволяет заменить NULL заданным значением по вашему выбору.

Пример

Вот базовый запрос, который возвращает небольшой набор результатов:

 ВЫБЕРИТЕ TaskCode как результат
ОТ Задач;
 

Результат:

 Результат
------
cat123
ноль
ноль
pnt456
rof789
ноль
 

Мы видим, что есть три строки, содержащие нулевые значения.

Если мы не хотим, чтобы нулевые значения отображались как таковые, мы могли бы использовать ISNULL () для замены null другим значением.

Как это:

 SELECT ISNULL (TaskCode, 'N ​​/ A') как результат
ОТ Задач;
 

Результат:

 Результат
------
cat123
N / A
N / A
pnt456
rof789
N / A
 

Мы также можем заменить его пустой строкой:

 SELECT ISNULL (TaskCode, '') как результат
ОТ Задач;
 

Результат:

 Результат
------
cat123
      
      
pnt456
rof789
        
 

Обратите внимание, что ISNULL () требует, чтобы второй аргумент имел тип, который можно неявно преобразовать в тип данных первого аргумента.Это потому, что он возвращает результат с использованием типа данных первого аргумента.

Предотвращение исчезновения нулевых строк

Есть некоторые функции T-SQL, в которых нулевые значения исключаются из набора результатов. В таких случаях нулевые значения вообще не возвращаются.

Хотя в некоторых случаях это может быть желательным результатом, в других случаях он может быть катастрофическим, в зависимости от того, что вам нужно делать с данными после их возврата.

Одним из примеров такой функции является STRING_AGG () .Эта функция позволяет вам возвращать набор результатов в виде списка с разделителями. Однако он также исключает нулевые значения из набора результатов. Таким образом, если мы воспользуемся этой функцией с приведенными выше примерами данных, мы получим три результата вместо шести:

 ВЫБЕРИТЕ STRING_AGG (TaskCode, ',') как результат
ОТ Задач;
 

Результат:

 Результат
----------------------
cat123, pnt456, rof789 

Итак, три строки, содержащие нулевые значения, не возвращаются.

Во многих случаях это идеальный результат, поскольку наш набор результатов не загроможден нулевыми значениями. Однако это также может вызвать проблемы, в зависимости от того, для чего будут использоваться данные.

Следовательно, если мы хотим сохранить строки с нулевыми значениями, мы можем использовать ISNULL () для замены нулевых значений другим значением:

 SELECT STRING_AGG (ISNULL (TaskCode, 'N ​​/ A'), ',') как результат
ОТ Задач;
 

Результат:

 Результат
-------------------------------------
cat123, н / д, н / д, pnt456, rof789, н / д 

Функция COALESCE ()

Функция ISNULL () работает аналогично функции COALESCE () .Таким образом, мы могли бы заменить приведенный выше код следующим:

 SELECT STRING_AGG (COALESCE (TaskCode, 'N ​​/ A'), ',') как результат
ОТ Задач;
 

И получим тот же результат:

 Результат
-------------------------------------
cat123, н / д, н / д, pnt456, rof789, н / д 

Однако есть некоторые различия в поведении этих двух функций. Для получения дополнительной информации о различиях, вот сравнение COALESCE () и ISNULL () на веб-сайте Microsoft.

Есть ли в sql server функция, противоположная ISNULL? Что делать Не является нулевым?

Так как мы находимся в среде СУБД, можно использовать подход, основанный на наборах. Итак, предполагая, что таблица имеет поле идентификатора (id) — первичный ключ или уникальный, а не null, задание может быть выполнено следующим образом:

  ВЫБРАТЬ числовое_поле * количество (флаг_поле) как not_null_flag_numeric_value_or_zero
ИЗ my_table
ГРУППА ПО идентификатору, числовое_поле
  

Если поле значения имеет символьный тип данных, должна использоваться некоторая функция char.Итак, практическая реализация подхода может выглядеть следующим образом:

  ВЫБРАТЬ * ВХОД
ИЗ
  (ЗНАЧЕНИЯ
    (1, 1, 111, 'строка_1'),
    (2, NULL, 222, 'строка_2')
  ) таблица_данных (id, flag_field, numeric_field, character_field)

ALTER TABLE # Contemporary_table ДОБАВИТЬ ОГРАНИЧЕНИЕ tab_pk ПЕРВИЧНЫЙ КЛЮЧ (id)

ВЫБРАТЬ
  count (flag_field) AS is_not_null,
  числовое_поле * количество (флаг_поле) как числовое_значение_или_ноль,
  numeric_field * nullif (count (flag_field), 0) как numeric_value_or_null,
  left (character_field, len (character_field) * count (flag_field)) AS character_value_or_empty,
  stuff (character_field, nullif (count (flag_field), 0), 0, '') AS character_value_or_null
ИЗ # временной_таблицы
ГРУППА ПО id, числовое_поле, символьное_поле

--DROP TABLE # Contemporary_table
  

Другой вариант получить знак NOT NULL в форме 1 — использовать преобразование значения flag_field в бит:

 ... cast (flag_field как бит) ...
  

Это работает, когда преобразование в бит доступно для вашего типа данных flag_field, и полезно, когда вы можете рассматривать 0-значения и NULL как одно и то же NO VALUE. Обозначается NULL или 0 — по вашему выбору:

  ВЫБРАТЬ
  nullif (приведение (flag_field как бит), 0) AS is_not_null_or_null,
  isnull (приведение (flag_field как бит), 0) AS is_not_null_or_zero,
  numeric_field * nullif (приведение (flag_field как бит), 0) AS value_or_null,
  numeric_field * isnull (приведение (flag_field как бит), 0) AS value_or_zero
ИЗ # временной_таблицы
  

SQL ISNULL (), NVL (), IFNULL () и COALESCE (), функция

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

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

P_Id Название продукта Цена за штуку шт. На складе шт. На заказ
1 Ярлсберг 10.45 16 15
2 Маскарпоне 32,56 23
3 Горгонзола 15,67 9 20

Если «UnitsOnOrder» является необязательным и может содержать значения NULL.

Мы используем следующий оператор SELECT:

ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products

В приведенном выше примере, если значение «UnitsOnOrder» равно NULL, то результат будет NULL.

Функция Microsoft ISNULL () используется для указания того, как обрабатывать значения NULL.

Функции NVL (), IFNULL () и COALESCE () также могут достичь тех же результатов.

Здесь мы надеемся, что значение NULL равно 0.

Теперь, если «UnitsOnOrder» имеет значение NULL, это не повлияет на расчет, потому что, если значение равно NULL, ISNULL () возвращает 0:

SQL Server / MS Access

ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + ISNULL (UnitsOnOrder, 0))
ИЗ Продукты

Oracle

Oracle не выполняет функцию ISNULL ().Однако мы можем использовать функцию NVL () для достижения того же результата:

ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + NVL (UnitsOnOrder, 0))
ИЗ Продукты

MySQL

MySQL также имеет аналогичную функцию ISNULL (). Но это работает с функцией Microsoft ISNULL () немного иначе.

В MySQL мы можем использовать функцию IFNULL () следующим образом:

ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + IFNULL (UnitsOnOrder, 0))
FROM Products

Или мы можем использовать функцию COALESCE () следующим образом:

ВЫБЕРИТЕ ProductName, UnitPrice * (UnitsInStock + COALESCE (UnitsOnOrder, 0))
ИЗ ПРОДУКТОВ

Краткое сравнение ISNULL и COALESCE — SQL TECH BLOG

Существуют сотни блогов, в которых функция T-SQL ISNULL сравнивается со стандартной функцией COALESCE ANSI.Есть также множество аргументов в пользу того, почему вы должны использовать одно вместо другого.

Я в лагере ISNULL. Однажды я спорил об этом с Microsoft MVP. Он был непреклонен в том, что вы должны использовать COALESCE, потому что ISNULL не является стандартной функцией ANSI. Мой аргумент был прост. COALESCE работает медленно. Он даже упомянул что-то глупое о том, что ISNULL, возможно, устареет в будущем, и я ответил, что он все еще не устарел в SQL 2016, поэтому он все еще будет в SQL 2018, так почему бы не написать более быстрый код для того, что у вас есть сегодня.Правильно?

Он не согласен. Я оставил это с идеей, что вы можете написать любое приложение, полностью независимое от платформы; Таким образом, вы можете просто продолжать переходить от платформы к платформе, когда понимаете, что производительность настолько низка из-за того, что вы не пользуетесь преимуществами кода конкретной платформы. Надеюсь, следующая платформа будет намного быстрее. Правильно? хе-хе.

Давайте обсудим, почему ISNULL часто быстрее

Не запуская это и не глядя ниже, изучите следующий оператор и скажите мне, каким должен быть результат для каждого столбца:

ОБЪЯВИТЬ @string char (1) = null

SELECT ISNULL (@string, «This is NULL») как A,
COALESCE (@string, «This is NULL») как B

Не торопитесь.

Подумайте об этом.

Они возвращают тот же результат?

Зачем мне использовать этот пример, если меня так беспокоит демонстрация скорости?

У тебя было достаточно времени подумать?

Вы придумали ответ?

Был ли ваш ответ «Это NULL» для обоих столбцов?

Был ли ваш ответ разным для каждого столбца?

Достаточно ли я расположил ответ по почте, чтобы вы еще не прочитали его сразу?

Ответ:

Столбец A = «T»

и столбец B = «Это NULL»

Как это возможно? Что ж, я могу сказать, что мы только что продемонстрировали одно крайнее различие между двумя функциями, которое вы, возможно, никогда раньше не замечали.

ISNULL учитывает тип данных ввода. COALESCE — нет.

Что произойдет, если вы замените «This is NULL» значением типа int, например 1234? Столбец A вернет «*», а B вернет 1234.

Понимание этого — огромный шаг к пониманию того, почему ISNULL часто может быть быстрее, чем его стандартная кузина ANSI COALSECE.

Если вам понравился этот пост, обязательно ознакомьтесь с другими моими постами в SQL Server Central и SQL Tech Blog.

Также не забудьте подписаться на меня в Twitter и LinkedIn.Я всегда рад новым одобрениям и болтаю со своими подписчиками.

Как это:

Нравится Загрузка …

Разница между ISNULL и COALESCE в SQL

В этой статье мы увидим разницу между ISNULL и COALESCE в SQL Server. И ISNULL, и COALESCE оценивают выражение для NULL и возвращают ненулевое значение.

ISNULL

Функция ISNULL.
заменяет NULL указанным значением.

ISNULL (контрольное_выражение, значение_замены)

Он содержит два параметра.Первый параметр — оценить выражение на NULL. Если первый параметр — ПУСТО (NULL), функция заменяет второй параметр.

COALESCE

COALESCE оценивает
выражение по порядку и возвращает первое ненулевое значение.

COALESCE
(выражение1, выражение2 [,… выражениеN])

Может содержать N параметров. Он возвращает первое ненулевое значение параметра.

Разница между ISNULL и COALESCE

  • Функция ISNULL возвращает тип данных первого параметра, тогда как COALESCE возвращает тип данных выражения с наивысшим приоритетом типа данных.
  • Когда первый параметр равен NULL, функция ISNULL неявно преобразует значение второго параметра в тип данных первого параметра.
  • ISNULL функция обрезает значение второго параметра, если оно длиннее первого параметра. В то время как COALESCE не усекает никаких значений.
  • Если тип данных обоих параметров в функции ISNULL не определен, то возвращается целочисленный тип данных. В выражении COALESCE хотя бы одно из значений NULL должно быть типизированным NULL.Если тип данных всех параметров не определен, возникает ошибка.
  • Оптимизатор запросов перезаписывает выражение COALESCE как выражение CASE, как показано ниже. В то время как функция ISNULL остается прежней.
 КОРПУС
    КОГДА (выражение1 НЕ ПУСТО) ТО выражение1
    КОГДА (выражение2 НЕ ПУСТО) ТО выражение2
    ELSE выражениеN
КОНЕЦ 
  • Функция ISNULL оценивается только один раз, тогда как выражение COALESCE оценивается несколько раз.

См. Также разбиение на страницы в SQL Server

.

Раздел: СУБД MS SQL Server
Теги: COALESCE в SQL, отсутствует в SQL, Microsoft SQL Server, MS SQL

COALESCE и ISNULL в SQL Server

Введение

COALESCE и ISNULL Функции используются для возврата первого ненулевого выражения среди входных выражений. Хотя эти две функции похожи, между ними есть определенные различия.Давайте углубимся, чтобы увидеть различия.

COALESCE и ISNULL

Чтобы понять основные функции COALESCE и ISNULL , рассмотрим следующий базовый пример:

В этом случае обе функции возвращают одинаковый результат 1759 . Одним из преимуществ COALESCE является то, что он поддерживает несколько входов.

Основные отличия включают:

  1. COALESCE является стандартом ANSI, тогда как ISNULL является специфичным для SQL Server
  2. COALESCE может принимать несколько параметров, тогда как ISNULL может принимать только два параметра

Типы данных Соображения

Основное различие между COALESCE и ISNULL заключается в их различии в обработке различных типов данных.

Тип данных выражения COALESCE — это тип данных ввода с наивысшим приоритетом типа данных. Если на всех входах нет типа NULL s, то будет возвращена ошибка.

Тип данных выражения ISNULL — это тип данных первого ввода. Если первый ввод — это нетипизированный литерал NULL , тип данных результата — это тип второго ввода. Если оба входа являются нетипизированными литералами, то тип вывода — INT .

Выход

Теперь рассмотрим пример:

Выход

Обратите внимание, что для COALESCE , независимо от того, какой ввод указан первым, тип вывода — VARCHAR (10) — тот, у которого более высокий приоритет. С ISNULL тип вывода зависит от первого ввода. Если первый ввод — VARCHAR (3) , то результатом также будет VARCHAR (3) .

Теперь рассмотрим второй пример:

Выход

Поскольку тип данных INT имеет приоритет над типом данных VARCHAR , SQL Server пытается преобразовать значение « abc » в INT , что приводит к ошибке.

Влияние на производительность

Обычно COALESCE (V1, V2) внутренне транслируется SQL Server как:

СЛУЧАЙ, КОГДА V1 НЕ НУЛЕНО, ТО V1 ELSE V2 END

Для тестирования производительности COALESCE и ISNULL я создаю новую таблицу с именем T1 и заполняю ее образцами данных, как показано ниже:

Рассмотрите следующий запрос и включите фактический план выполнения:

Возвращает сумму 124750 и возвращает такой план выполнения:

Хотя таблица T1 упоминается только один раз, из-за функции COALESCE таблица сканируется дважды.

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

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