对列Null值进行解码

时间:2016-01-05 12:42:16

标签: sql oracle decode

我有一张桌子:

Shipment   Order_no   BOL_No
100        2332       <null>
101        <null>     4443

我想解码列的空值。如果Order_no为null,则显示“T”,如果Bol_No为null,则显示“P”。

如何在此列上放置解码?

4 个答案:

答案 0 :(得分:1)

试试这个:


SELECT Shipment, 
DECODE(Order_no, NULL, 'T') "Order_No",
DECODE(BOL_No, NULL, 'P') "BOL_No"
FROM `tablename`

答案 1 :(得分:1)

使用NVL:

SELECT shipment, NVL(oder_no,'T'), NVL(bol_no,'P')
from table_name -- use the correct name

NVL返回第一个参数,除非它是NULL,在这种情况下它给出第二个参数。

答案 2 :(得分:1)

使用以下内容:

select shipment
     , nvl(order_no,'T') order_no
     , nvl(bol_no,'P')   bol_no
  from t
     ;

注意数据类型不匹配,您可能需要先将列内容转换为varchar2:

select shipment
     , nvl(to_char(order_no),'T')   order_no
     , nvl(to_char(bol_no),  'P')   bol_no
  from t
     ;

答案 3 :(得分:1)

小心类型。您的列看起来像数字。如果是这样,您应该将它们显式转换为字符串:

select shipment,
       coalesce(cast(order_no as varchar2(255)), 'T') as order_no,
       coalesce(cast(bol_no as varchar2(255)), 'P') as bol_no
from t;

依赖隐式转换可能会引入真正非常难以找到的数据错误。

如果它们已经是字符串,那么只需使用coalesce()(不使用cast())。 coalesce()nvl()的ANSI标准版本。