在Firebird里如何防止空值扩散

流年演绎病态

流年演绎病态

2016-02-19 20:47

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享在Firebird里如何防止空值扩散的教程,热爱PS的朋友们快点看过来吧!
        在统计、计算、合并数据时,空值扩散问题,有时不经意冒出来,一不小心,就会导致结果出错。
          我举个例子。
         有一个成绩表achieve,有四个字段:yuwen、shuxue、yingyu、total,分别用来存储语文、数学、英语及总分。现在要计算学生的总分,现写出如下SQL语句:
          update achieve set total=yuwen+shuxue+yingyu
          这句语句好像是没错的,但有时得不出有用的结果,比如,有个学生语文80,数学90,英语缺考,没填成绩,这时yingyu字段的值很可能不是0而是NULL,空值,要看设计的人是什么想法。如果yingyu的值为NULL,那么,大家猜猜,计算出来,总分字段total为多少?
          按一般的想法,当然是80+90,这个学生的总分是170,英语字段不参加计算。但是,这是错误的!
          实际计算出来,这个学生的总分为空(NULL)。
          在一个SQL计算表达式里,如果有一个值为空,那么结果就一定为空!这就是空值扩散!!!
          那么,如何防止出现空值扩散的情况呢?
          在这方面,SQL Server提供了ISNULL()函数,Access提供了NZ()函数,都可以解决这个问题,这些函数就是提供一个判断功能:如果为空,则用某个值代替,比如用0或用空字符串等。Firebird有类似函数么?
          有,那就是函数coalesce()。
          只要将以上的SQL语句改为如下即可。
         update achieve set total=coalesce(yuwen,0)+coalesce(shuxue,0)+coalesce(yingyu,0)
          这样写,似乎麻烦了一些,但是,它是一个安全的代码。

展开更多 50%)
分享

猜你喜欢

在Firebird里如何防止空值扩散

编程语言 网络编程
在Firebird里如何防止空值扩散

access如何用代码在“默认值”里实现自动编号

编程语言 网络编程
access如何用代码在“默认值”里实现自动编号

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server的空值处理策略

SQLServer
SQL Server的空值处理策略

防止空连接#返回到页面顶端

Html CSS布局 Div+CSS XHTML
防止空连接#返回到页面顶端

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

.NET和SQL Server中“空值”辨析

电脑网络
.NET和SQL Server中“空值”辨析

精华推荐:SQL Server的空值处理策略

SQLServer
精华推荐:SQL Server的空值处理策略

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10 7月底完成正式版 你的显卡硬件支持DX12吗?

Win10 7月底完成正式版 你的显卡硬件支持DX12吗?

用两种方法快速简单的实现窗口淡入淡出

用两种方法快速简单的实现窗口淡入淡出
下拉加载更多内容 ↓