nvl(instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+ 5),''), 长度(SUBSTR(ovrflo_adrs_info,INSTR(ovrflo_adrs_info, 'ビ')+ 5))))
这是作为substr函数的参数。
如果instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5),' ')
是!= 0
,那么我想要那个值,否则我想要length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5))
有一种简单的方法吗?
答案 0 :(得分:12)
您可以使用NVL(NULLIF(A,'0'), B)
答案 1 :(得分:5)
从技术上讲,您可以通过减少键入来执行此操作:
nvl(
nullif(instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5),' '),0),
length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5))
)
但是,我通常会与Conrad一起建议你使用CASE,这样就可以更容易地判断代码的意图是为了将来的维护。
答案 2 :(得分:4)
我认为您需要使用CASE
e.g。
WHEN instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5),' ') != 0 THEN
length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5))
ELSE
Some Default
END as foo
答案 3 :(得分:4)
由于原帖的额外措辞,我发现这两个答案都难以阅读。总结康拉德和克雷格的答案:
要复制nvl(A,B),但是对于0而不是null,您可以执行以下操作:
WHEN A != 0 THEN
A
ELSE
B
END
或克雷格更紧凑(但其他人更难阅读):
NVL(NULLIF(A,0),B)
我认为以下内容也有效:
DECODE(A,0,B,A)