在Firebird里如何防止空值扩散

2016-02-19 20:47 62 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享在Firebird里如何防止空值扩散的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

        在统计、计算、合并数据时,空值扩散问题,有时不经意冒出来,一不小心,就会导致结果出错。
          我举个例子。
         有一个成绩表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)
          这样写,似乎麻烦了一些,但是,它是一个安全的代码。

来源:https://www.tulaoshi.com/n/20160219/1624527.html

延伸阅读
浴室是家中不可忽略的宝宝安全隐患地带,湿漉欲滑的地板,危险的电器用品,潜伏毒性的清洁剂都有可能威胁到宝宝的健康安全。所以洗澡时间在成为你和宝宝共聚同欢的最特别的时刻的同时,我们也要尽可能地注意使浴室安全化。 如何防止宝宝在浴室中的磕碰 浴室安全要注意浴室里的硬件安全,直到宝宝可以自己坐着的在浴缸中洗澡的时候...
简述: 单据流水号生成问题 问题: 如何用代码在“默认值”里实现自动编号?单据流水号生成问题。 如何用代码在“默认值”里实现自动编号? 如果我想实现不同类型的自动编号,我应该怎么设置代码呢? 如:第1号、第2号、...........、第198号.................. 或:CN0001-A、CN0002-B、CN0003-B、.........、CN0004-A、CN1998-B…… ...
标签: 电脑入门
若想高亮度显示某一数据区域的重复值,可以使用 Excel 2010 中的条件格式得以实现。具体操作方法如下: 选择数据区域,如实例中货品编号所在的 A2:A13 区域。 从开始选项卡中选择条件格式,并点击新建规则。 选择仅对唯一值或重复值设置格式,确认已选中重复,即针对所选数据区域中的重复值设置相应格式。 点击上图中右下角格式...
标签: excel
在Excel 2010中如何高亮显示重复值 若想高亮度显示某一数据区域的重复值,可以使用 Excel 2010 中的条件格式得以实现。具体操作方法如下: 选择数据区域,如实例中货品编号所在的 A2:A13 区域。 从开始选项卡中选择条件格式,并点击新建规则。 选择仅对唯一值或重复值设置格式,确认已选中重复,即针对所选数据区域...
在月子里如何预防肥胖发生 在坐月子期间,新妈妈如果不注意饮食和运动的话,是很容易胖起来的。那么在月子里如何预防肥胖发生?母婴健康专家指出,新妈妈虽然不能急于减肥,但是在月子里只要做好以下几件事就可以起到预防产后肥胖的作用哦。是不是迫不及待的想看看都是哪些事项呢? 产后多久能减肥 产后六个月是新妈妈瘦身的黄金期。但刚刚...

经验教程

674

收藏

51
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部