将null转换为0并插入

4

我有一个包含空值的表格。我想将这个表格复制到另一个表格,并将一个列中的空值替换为0。但我的目标表格不接受该列中的空值,这是否可能呢?

insert into MyNewTable (A, B, C) select AA, BB, isnull(CC, 0) from MyOldTable

其中CC可能为空值。

感谢任何帮助。


2
再见?你这么快就要走了吗?我们的评论/答案怎么办? - BoltClock
@BoltClock - 开心地度过周末的开始...哈哈..:) - Sachin Shanbhag
3个回答

6
只需使用ISNULL()函数。
Insert into MyNewTable (A, B, C) select (AA, BB, ISNULL(CC,0)) from MyOldTable

错误。(AA,BB,CC) 是 SQL Server 不认识的三元组。 - RichardTheKiwi

5
您可以使用IsNull(a, b)Coalesce(a, b, c, ...)函数,其中IsNull函数在a为null时返回b的值,而Coalesce返回第一个非空参数。
重要的区别是IsNull()强制将"b"转换为"a"的类型,而Coalesce的返回类型与返回的参数相同,让引擎在函数评估后尝试任何转换。
例如,如果列"a"的数据类型为int,则编写IsNull(a, '1')是可以的,但编写IsNull(a, 'hello')会导致转换错误,而编写Coalesce(a, 'hello')是允许的,仅当a为空并且您尝试将返回的值('hello')插入到int列中时才会引发错误,但在将a的值(如果不为空)自动转换为varchar列插入时不会出错。

太棒了,我正准备查一下这两者之间的区别,但你帮我省去了麻烦。 - stusherwin
@Stuart:非常乐意帮忙。感谢您对语法的纠正。我知道我的英语不是很好。 - BertuPG

1
你可以使用 coalesce 函数来实现这个功能:
INSERT INTO MyNewTable (A, B, C)
SELECT COALESCE(AA, 0), COALESCE(BB, 0), COALESCE(CC, 0) FROM MyOldTable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接