我想问一下如何在一个Statement中使用NVL和CASE。
SELECT case
when column1 like '% =' then replace(column1,' =','=')
else column1
end
from table;
SELECT nvl(SUBSTR(column1, INSTR(column1, 'text1') +3,
INSTR(column1, 'text2')-(INSTR(column1, ':text1')+4)),'Default')
from table;
我想要的是使用select语句的输出作为nvl语句中的column1。
答案 0 :(得分:1)
也许您可以使用子选择:
SELECT nvl(SUBSTR(column2, INSTR(column2, 'text1') +3,
INSTR(column2, 'text2')-(INSTR(column2, ':text1')+4)),'Default')
from
(
SELECT case
when column1 like '% =' then replace(column1,' =','=')
else column1
end column2
from test);
答案 1 :(得分:0)
除非你担心字符串末尾没有出现等号的字符串,否则我不会理解案例陈述,如果你担心这一点,我会推荐REGEXP_REPLACE
函数代替。以下函数只删除存储在column1中的终止等号前面的单个空格:
REGEXP_REPLACE(column1,' =$','=')
然后将上述函数放在select语句中出现column1
的任何位置。
select COALESCE( SUBSTR( REGEXP_REPLACE(column1,' =$','=')
, INSTR(REGEXP_REPLACE(column1,' =$','='), 'text1')+3
, INSTR(REGEXP_REPLACE(column1,' =$','='), 'text2')
-(INSTR(REGEXP_REPLACE(column1,' =$','='), ':text1')+4))
, 'Default')
from table;