Перейти к содержимому

Как заменить null на 0 в sql

  • автор:

Замена 0 на Null

В запросах Insert Values и Update, константа 0 или параметр со значением 0 заменяется на Null при записи в поле, если поле является ссылкой и поддерживает запись Null.

Работает только для константы 0. Значения выражений и запросов результат которых равен 0 не преобразовывается. Например 0+0 или даже (0).

Это замена не работает в хранимых процедурах.

Procedure OnCreate; Var Name : String; Group : Integer; Begin Name := 'test'; Group := 0; // При выполнении этого запроса Group будет заменено на Null (Insert Into Clients(Name, Group) Values(:Name, :Group)); // При выполнении этого запроса Group будет заменено на Null (Update Clients Set Group=:Group Where Name=:Name); // При выполнении этого запроса 0 будет заменено на Null (Update Clients Set Group=0 Where Name=:Name); // При выполнении этих запросов Group НЕ БУДЕТ заменено на Null (Update Clients Set Group=(:Group) Where Name=:Name); (Update Clients Set Group=:Group+0 Where Name=:Name); (Insert Into Clients(Name, Group) Select :Name, :Group); End;

Это сделано, что бы в программе не работать со значениями Null. К сожалению значения Null обязательны для корректной работы внешних ключей и JOIN-ов.

При извлечении значения Null из базы данных, он автоматически заменяется на 0, 0c, » или NullDatetime.

Procedure OnCreate; Var Name : String; Group : Integer; Begin Name := 'test'; // При выполнении этого запроса Null будет заменено на 0 Group := (Single Group From Clients Where Name=:Name); End;

Можно сделать замену 0 на Null и для выражений, но это снизит производительность.

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

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

Синтаксис

ISNULL ( check_expression , replacement_value ) 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

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.

Замечания

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

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

Примеры

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

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

USE AdventureWorks2022; GO SELECT AVG(ISNULL(Weight, 50)) FROM Production.Product; GO 
-------------------------- 59.79 (1 row(s) affected) 

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

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

USE AdventureWorks2022; 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)

C. Проверка значений NULL в предложении WHERE

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

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

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

D. Использование функции 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

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

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

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

Как заменить null на 0 в sql

Чтобы заменить значение NULL на 0 в SQL, можно использовать функцию COALESCE . Эта функция принимает несколько аргументов и возвращает первый не NULL аргумент. Если все аргументы NULL , функция вернет NULL . Вот пример использования COALESCE для замены значений NULL на 0 :

SELECT COALESCE(column_name, 0) FROM table_name; 

В этом запросе column_name — имя столбца, значения которого нужно заменить, а table_name — имя таблицы, в которой находится столбец. Функция COALESCE заменит все значения NULL в столбце на 0 . Если значение столбца не NULL , то функция вернет его без изменений.

Также можно использовать оператор IS NULL для проверки на NULL и замены его на 0 . Вот пример:

SELECT CASE WHEN column_name IS NULL THEN 0 ELSE column_name END FROM table_name; 

Этот запрос также заменит значения NULL на 0 . Если значение столбца не NULL , то запрос вернет его без изменений.

Как заменить null на 0 в sql

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

insert into MyTable values (1, 'teststring', NULL, '8-May-2004')
update MyTable set MyField = null where YourField = -1
if (Number = 0) then MyVariable = null;

— « Минуточку. но вы сказали, что MyField = NULL было недопустимо! »

Это верно. для оператора сравнения « = » (по крайней мере для СУБД Firebird до версии 2.0). Но здесь мы говорим о знаке « = », как об операторе присваивания . К сожалению, в SQL оба эти оператора имеют один и тот же символ. В случае присваивания, которое выполняется с помощью « = » или внутри списка вставки, вы можете трактовать NULL , как любое другое значение, — специальный синтаксис не требуется.

Firebird Documentation Index → NULL в СУБД Firebird → Установка значения поля или переменной в NULL

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

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