我有一张桌子:
Shipment Order_no BOL_No
100 2332 <null>
101 <null> 4443
我想解码列的空值。如果Order_no为null,则显示“T”,如果Bol_No为null,则显示“P”。
如何在此列上放置解码?
答案 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标准版本。