Как заменить null на 0 в sql
Перейти к содержимому

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

TablePlus

When selecting data from a table, there might be some NULL values that you don’t want to show, or you want to replace it with 0 for the aggregate functions. Then you can use COALESCE to replace the NULL with 0.

For example, we have the table salaries with 5 columns: emp_no , from_date , to_date , salary , bonus . But the bonus column is optional and may contain NULL values.

emp_no salary from_date to_date bonus
10001 60117 1986-06-26 1987-06-26 2000
10001 62102 1987-06-26 1988-06-25 NULL
10001 66074 1988-06-25 1989-06-25 NULL
10001 66596 1989-06-25 1990-06-25 3000
10001 66961 1990-06-25 1991-06-25 1500
10001 71046 1991-06-25 1992-06-24 NULL
10001 74333 1992-06-24 1993-06-24 NULL
10001 75286 1993-06-24 1994-06-24 2000

Run this SELECT … COALESCE … statement to return 0 as the alternative value when bonus value is NULL:

In MySQL you can also use IFNULL function to return 0 as the alternative for the NULL values:

In MS SQL Server, the equivalent is ISNULL function:

In Oracle, you can use NVL function:

emp_no salary from_date to_date bonus
10001 60117 1986-06-26 1987-06-26 2000
10001 62102 1987-06-26 1988-06-25 0
10001 66074 1988-06-25 1989-06-25 0
10001 66596 1989-06-25 1990-06-25 3000
10001 66961 1990-06-25 1991-06-25 1500
10001 71046 1991-06-25 1992-06-24 0
10001 74333 1992-06-24 1993-06-24 0
10001 75286 1993-06-24 1994-06-24 2000

Need a good GUI tool for databases? TablePlus provides a native client that allows you to access and manage Oracle, MySQL, SQL Server, PostgreSQL and many other databases simultaneously using an intuitive and powerful graphical interface.

Need a quick edit on the go? Download for iOS

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

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

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

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 .

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

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

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 стоит пробел.

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

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

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

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

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

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

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 стоит пробел.

Как составить sql запрос на замену null на 0?

Нужен запрос который будет преобразовывать значение столбца в 0 если оно null, но если нет, то должно возвращаться значение столбца.

Просто если в каком-то из столбцов стоит значение null, то в suma тоже получается null. Помогите решить проблему.

  • Вопрос задан более двух лет назад
  • 2154 просмотра
  • Facebook
  • Вконтакте
  • Twitter
  • Facebook
  • Вконтакте
  • Twitter

DERBIAGLOBALISTO, если вот эти подзапросы:

всегда возвращают не более одной записи, можно попробовать переписать запрос так:

Если не поможет — надо уже предметно разбираться, смотреть какие у вас таблицы, связи, данные, индексы, каким получается план выполнения.

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

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