扩展NULL加法运算


DM技术交流QQ群:940124259

1. 场景描述

经常在SQL查询中遇到某些字段可为NULL的属性,当取出某一行数据记录时,需利用该字段进行算数运算(数字),一碰见NULL空值整个运算结果为NULL,说明NULL值具有一切皆空传染性。当开发人员向我方提出两者(两个字段,值未知,可NULL可值)参与运算,当且仅当一个操作数据为NULL,可视NULL为0参与正确的算数运算,而两者都为NULL,则整个运算结果为NULL。
为处理这种两者之间的关系,即两者之间的排序组合,分四种情况,再用数据库内置函数已经无法满足当前需求,得自定义函数实现。

举例: TEST表有A,B两个字段,并且两个字段的属性可以为空,针对两者相加的情形以下
⑴ A(NOTNULL) + B(NOTNULL)
⑵ A(NOTNULL) + B(NULL)
⑶ A(NULL) + B(NOTNULL)
⑷ A(NULL) + B(NULL)


2. 解决方法

自定义一个确定性函数,在内部通过条件判断控制NULL转换。此案例可灵活采用这种方案,适用改写乘除减法运算。

TIPS: 之所以使用NVL函数转换NULL值,是因为它对数据类型自动转换非常友好,可读性也强,即NOTNULL。

create function numadd(v1 NUMBER, v2 NUMBER) 
  return number deterministic
as
  sum number := 0;
begin
   case 
      when not (v1 is null and v2 is null) 
      then     
          sum = nvl(v1, 0) + nvl(v2, 0) ;    
      else
          sum = v1 + v2 ;
   end case;

   return sum;
end numadd;
/

3. 测试用例

本人环境测试用例

drop table if exists test;
create table test (a int, b int);
insert into test values(0, 0), 
	                   (1, 1), 
	                   (null, 2), 
	                   (3, null), 
	                   (null,null);
commit;
select a, b, numadd(a, b) from test;

在这里插入图片描述

注意:<>这个显示占位符是我的管理工具自定义的,表示真实的NULL值,而不是NULL普通字符串,为区分真空值(根本没值)和伪空值(实际字符串)。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Verilog中,拼接运算是一种将多个变量或常量连接在一起形成一个更大的变量或常量的操作。拼接运算可以使用花括号{}来实现。 例如,引用\[1\]中的代码展示了一个加法器的例子,其中使用了拼接运算符{}将进位输出和和输出连接在一起。 在引用\[2\]中的代码中,使用了拼接运算符{}将一个变量a的多个位重复扩展,并将结果赋值给另一个变量result。这个例子展示了如何使用拼接运算符{}进行变量的重复扩展。 在引用\[3\]中的代码中,使用了拼接运算符{}将多个变量和常量连接在一起形成一个更大的变量。具体来说,变量a被扩展了两次,然后与变量c和d连接在一起。 总结起来,Verilog中的拼接运算使用花括号{}来将多个变量或常量连接在一起形成一个更大的变量或常量。这种操作可以用于重复扩展变量、连接多个变量以及形成更复杂的数据结构。 #### 引用[.reference_title] - *1* *2* [Verilog位拼接运算符{}](https://blog.csdn.net/mxh3600/article/details/124109641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Verilog 位拼接运算符{}语法要点总结](https://blog.csdn.net/hanshuizhizi/article/details/116521728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值