Sql 对空值列进行解码
我有一张桌子:Sql 对空值列进行解码,sql,oracle,decode,Sql,Oracle,Decode,我有一张桌子: Shipment Order_no BOL_No 100 2332 <null> 101 <null> 4443 装运订单号BOL号 100 2332 101 4443 我想解码列的空值。如果订单号为空,则显示“T”;如果订单号为空,则显示“P” 如何在此列中放置decode?尝试以下操作: SELECT Shipment, DECODE(O
Shipment Order_no BOL_No
100 2332 <null>
101 <null> 4443
装运订单号BOL号
100 2332
101 4443
我想解码列的空值。如果订单号为空,则显示“T”;如果订单号为空,则显示“P”
如何在此列中放置decode?尝试以下操作:
SELECT Shipment,
DECODE(Order_no, NULL, 'T') "Order_No",
DECODE(BOL_No, NULL, 'P') "BOL_No"
FROM `tablename`
试试这个:
SELECT Shipment,
DECODE(Order_no, NULL, 'T') "Order_No",
DECODE(BOL_No, NULL, 'P') "BOL_No"
FROM `tablename`
使用NVL:
SELECT shipment, NVL(oder_no,'T'), NVL(bol_no,'P')
from table_name -- use the correct name
NVL返回第一个参数,除非它为NULL,在这种情况下它给出第二个参数。使用NVL:
SELECT shipment, NVL(oder_no,'T'), NVL(bol_no,'P')
from table_name -- use the correct name
NVL返回第一个参数,除非它为NULL,在这种情况下,它会给出第二个参数。使用以下命令:
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
;
使用以下命令:
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
;
小心打字。您的列看起来像数字。如果是,则应显式地将它们转换为字符串:
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()
是ANSI标准版的nvl()
请注意类型。您的列看起来像数字。如果是,则应显式地将它们转换为字符串:
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标准版本