11

我有一个临时表,其中我的一列total_amount是整数类型而不是 NOT NULL。在查询数据时,我收到了列 NULL的值。total_Amount

我如何使用以下语法来删除空值,但仍然出现空值,如果我错了,请纠正我。

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  

我在其他方面面临问题。

4

6 回答 6

22

您可以使用 COALESCE 函数自动将 null 值返回为 0。语法如下所示:

SELECT COALESCE(total_amount, 0) from #Temp1
于 2013-10-01T11:37:20.340 回答
4

当有多个列 [and]/[or] 值并且您想要第一个值时,coalesce() 是最佳解决方案。但是,在线查看书籍时,查询优化会将其转换为案例语句。

MSDN 摘录

COALESCE 表达式是 CASE 表达式的语法快捷方式。

也就是说,查询优化器将代码 COALESCE(expression1,...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
于 2013-10-01T12:30:02.880 回答
1

尝试这个

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
于 2015-05-01T07:56:59.023 回答
1

您应该始终在所有情况下返回相同的类型:

在第一个中,您有一个字符,而在第一个中,您有一个 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  
于 2013-10-01T11:37:02.637 回答
1

将 Null 值替换为空:ISNULL('Value','')

将空值替换为 0:ISNULL('Value',0)

于 2017-05-03T11:44:28.803 回答
1

在sql server中替换NULL的不同方法

使用以下方法替换 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
于 2015-10-28T19:38:19.373 回答