Замените NULL на значение "Пусто" или "Нуль" на сервере sql

У меня есть временная таблица и в том, что один из моих столбцов total_amount имеет целочисленный тип и NOT NULL. При запросе данных я получил NULL значения для столбца total_amount.

Как бы то ни было, я использовал следующий синтаксис для удаления нулей, но некоторые, как появляются значения NULL, исправьте меня, если я ошибаюсь.

Create table #Temp1
(
    issue varchar(100) NOT NULL,
    total_amount int NOT NULL
) 

Это мой запрос

Case when total_amount = 0 then 0  
else isnull(total_amount, 0)  
end as total_amount  

Я столкнулся с проблемой в моей другой части.

Ответ 1

Вы можете использовать функцию COALESCE для автоматического возврата нулевых значений как 0. Синтаксис показан ниже:

SELECT COALESCE(total_amount, 0) from #Temp1

Ответ 2

Coalesce() - лучшее решение, когда есть несколько столбцов [и]/[или], и вы хотите первый. Однако, глядя на книги в режиме онлайн, оптимизация запроса преобразует его в оператор case.

Выдержка MSDN

Выражение COALESCE является синтаксическим ярлыком для выражения CASE.

То есть код COALESCE (выражение1,... n) переписывается оптимизатором запросов как следующее выражение CASE:

CASE
   WHEN (expression1 IS NOT NULL) THEN expression1
   WHEN (expression2 IS NOT NULL) THEN expression2
   ...
   ELSE expressionN
END

С учетом сказанного, почему бы не просто ISNULL()? Меньше кода = лучшее решение?

Вот полный фрагмент кода.

-- drop the test table
drop table #temp1
go

-- create test table
create table #temp1
(
    issue varchar(100) NOT NULL,
    total_amount int NULL
); 
go

-- create test data
insert into #temp1 values
    ('No nulls here', 12),
    ('I am a null', NULL);
go

-- isnull works fine
select
    isnull(total_amount, 0) as total_amount  
from #temp1

И последнее, но не менее важное: как получить нулевые значения в столбце NOT NULL?

Мне пришлось изменить определение таблицы, чтобы я мог настроить тестовый сценарий. Когда я пытаюсь изменить таблицу на NOT NULL, она терпит неудачу, так как она выполняет проверку недействительности.

-- this alter fails
alter table #temp1 alter column total_amount int NOT NULL

Ответ 3

Вы всегда должны возвращать один и тот же тип во всех случаях:

В первом случае у вас есть символ, а на другом - int.

Вы можете использовать:

Select convert(varchar(11),isnull(totalamount,0))

или если вы хотите с вашим решением:

Case when total_amount = 0 then '0'   
else convert(varchar(11),isnull(total_amount, 0))  
end as total_amount  

Ответ 4

Заменить нулевые значения как пустые: ISNULL('Value','')

Заменить нулевые значения как 0: ISNULL('Value',0)

Ответ 5

Попробуйте это

SELECT Title  from #Movies
    SELECT CASE WHEN Title = '' THEN 'No Title' ELSE Title END AS Titile from #Movies

ИЛИ

SELECT [Id], [CategoryId], ISNULL(nullif(Title,''),'No data') as Title, [Director], [DateReleased] FROM #Movies

Ответ 6

Различные способы замены NULL на сервере sql

Замена значения NULL с помощью:

1. Функция ISNULL()

2. Функция COALESCE()

3. Заявление CASE

SELECT Name as EmployeeName, ISNULL(Bonus,0) as EmployeeBonus from tblEmployee

SELECT Name as EmployeeName, COALESCE(Bonus, 0) as EmployeeBonus 
FROM tblEmployee

SELECT Name as EmployeeName, CASE WHEN Bonus IS NULL THEN 0 
ELSE Bonus  END as EmployeeBonus 
FROM  tblEmployee