+ -
当前位置:首页 → 问答吧 → Oracle SQL 处理 null value

Oracle SQL 处理 null value

时间:2014-04-11

来源:互联网

平日写开 Oracle SQL 都会用 nvl, nvl2, coalesce 来处理 null value.

之前遇到一个问题, 个 table 有三个 columns: col1, col2 同 col3.
如果 col1 同 col2 都唔系 null, 就出 col1, 否则出 col3.

我心目中其实有几个答案, 但都想知大家会点写.

谢谢.

作者: tripleooo   发布时间: 2014-04-11

有答案你唔写出嚟先?

作者: a8d7e8   发布时间: 2014-04-11

这是我遇到这个问题时的第一个想到的写法
select
case when c1 is null and c2 is null then c3
else c1
end
from XXX

作者: tripleooo   发布时间: 2014-04-11

上面系我遇到这个问题时第一个想到的 solution, 跟住有一个同事想到另一个方法写, 最后再有一个同事想到多一种写法。

我放上来就系想知会唔会有第四种写法.

作者: tripleooo   发布时间: 2014-04-11

引用:原帖由 tripleooo 於 2014-2-24 11:33 PM 发表
上面系我遇到这个问题时第一个想到的 solution, 跟住有一个同事想到另一个方法写, 最后再有一个同事想到多一种写法。

我放上来就系想知会唔会有第四种写法.
我就觉得 database 不应该用 null value 。
我宁愿加多一个 field (如 boolean 或 tinyint 等)来代替是否 null 。
这样操作上应该灵活得多。

作者: xianrenb   发布时间: 2014-04-11

咁你讲埋嗰两种写法先啦
引用:原帖由 tripleooo 於 2014-2-24 23:33 发表
上面系我遇到这个问题时第一个想到的 solution, 跟住有一个同事想到另一个方法写, 最后再有一个同事想到多一种写法。

我放上来就系想知会唔会有第四种写法.

作者: a8d7e8   发布时间: 2014-04-11

引用:原帖由 tripleooo 於 23/2/2014 15:01 发表
平日写开 Oracle SQL 都会用 nvl, nvl2, coalesce 来处理 null value.

之前遇到一个问题, 个 table 有三个 columns: col1, col2 同 col3.
如果 col1 同 col2 都唔系 null, 就出 col1, 否则出 col3.

我心目中其 ...
引用:原帖由 tripleooo 於 24/2/2014 23:28 发表
这是我遇到这个问题时的第一个想到的写法
select
case when c1 is null and c2 is null then c3
else c1
end
from XXX
你条SQL有明显问题,当c1 & c2都系null先回c3,其他回c1。
如果c1系null c2唔系呢,你顶楼原意系要出c3,但条SQL出c1了

作者: skww   发布时间: 2014-04-11

原来写错了条问题. 应该系:
如果 c1 或 c2 唔系 null, 就出 c1, 否则出 c3.我都写番我同其它同事谂到的 solution.Solution 2: select nvl2(c1, c1, nvl2(c2, c1, c3) from XXXSolution 3: select decode(c1, null, decode(c2, null, c3, c1), c1) from XXXSolution 4: select nvl2(c1||c2, c1, c3) from XXX我估唔到问下d 同事, 竟然出了四个答案咁多. 开始明白集思广益的重要. 所以想知大家会唔会有第五个 solution.

作者: tripleooo   发布时间: 2014-04-11

测试晒啲 "solution" 未?
引用:原帖由 tripleooo 於 2014-2-25 22:20 发表
原来写错了条问题. 应该系:
如果 c1 或 c2 唔系 null, 就出 c1, 否则出 c3.我都写番我同其它同事谂到的 solution.Solution 2: select nvl2(c1, c1, nvl2(c2, c1, c3) from XXXSolution 3: select decode(c1, null, ...

作者: a8d7e8   发布时间: 2014-04-11

引用:原帖由 tripleooo 於 2014-2-25 10:20 PM 发表
原来写错了条问题. 应该系:
如果 c1 或 c2 唔系 null, 就出 c1, 否则出 c3.我都写番我同其它同事谂到的 solution.Solution 2: select nvl2(c1, c1, nvl2(c2, c1, c3) from XXXSolution 3: select decode(c1, null, ...
可以用bit shift ////

作者: leonleon622   发布时间: 2014-04-11