Null的处理

编辑
文档创建者:zsh331 (73316 )     浏览次数:1833次     编辑次数:3次     最近更新:jiangsr 于 2018-06-14     

目录:

1. 描述编辑

我们在建立数据集时,有时候可以会在原表基础上对字段进行加减乘除的运算,此时如果遇到字段中有Null或0值的情况,我们该怎么处理呢?

2. 思路编辑

可以对Null或0值通过数据库表达式进行转换再运算。

3. 示例编辑

3.1 示例(字段为空)
当在做二个字段相乘,一个有数据值,一个为空值时,这时您会发现语句并不会报错,但是这种结果并不是想要的,您的需求是当数据列值为空时,用1来表示。OK,现在我们就以实例(分不同的数据库)来解答!

准备数据

-- ---------------------------- -- Table structure for test_c -- ---------------------------- DROP TABLE [dbo].[test_c] GO CREATE TABLE [dbo].[test_c] ( [cp] varchar(255) NULL , [price] int NULL , [numb] int NULL ) GO -- ---------------------------- -- Records of test_c -- ---------------------------- INSERT INTO [dbo].[test_c] ([cp], [price], [numb]) VALUES (N'苹果', N'80', N'20') GO GO INSERT INTO [dbo].[test_c] ([cp], [price], [numb]) VALUES (N'橘子', N'35', null) GO GO INSERT INTO [dbo].[test_c] ([cp], [price], [numb]) VALUES (N'菠萝', N'45', N'0') GO GO INSERT INTO [dbo].[test_c] ([cp], [price], [numb]) VALUES (N'香蕉', N'24', null) GO GO INSERT INTO [dbo].[test_c] ([cp], [price], [numb]) VALUES (N'西瓜', N'60', N'15') GO GO 

cp  price    numb
  苹果  80  20
  橘子  35  
  菠萝  45  0
  香蕉  24  
  西瓜  60  15

1)SQL Server 数据库--使用Isnull()函数

SELECT cp, price, numb, price * isnull(numb, 1) AS priceb --isnull(numb, 1) 当numb的值为空值时,就返回1 FROM test_c; 
222
2)Oracle 数据库-使用nvl()函数
select cp, price, numb, price * nvl(numb, 1) as priceb --nvl(numb, 1) 当numb的值为空值时,就返回1 from test_c; 

222

3)MySQL 数据库-使用Coalesce()函数

SELECT cp, price, numb, price * coalesce(numb, 1) AS priceb -- coalesce(numb, 1) 当numb的值为空值时,就返回1 FROM test_c; 

222

3.2 示例(字段为0)

当我们在做数据集sql运算的时候,可能会遇见字段相除的情况,这个时候可要注意,分母不能为0,例:

SELECT cp, price, numb, price /numb AS priceb FROM test_c; 

会报如下错误

[SQL]SELECT cp, price, numb, price /numb AS priceb FROM test_c [Err] 22012 - [SQL Server]遇到以零作除数错误。 

如果遇到分母为0的情况,我们可这样处理。

以sql server为例

SELECT cp, price, numb, price / CASE WHEN numb = 0 THEN Null ELSE numb END AS priceb --CASE WHEN numb = 0 THEN Null ELSE numb END 解释:当numb = 0时,返回null FROM test_c; 

222

注:分母不能为空,但分子能为空

附件列表


主题: 专题总结
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗? [ 去社区提问 ]