如果行为不端的INSTR

时间:2016-09-05 15:29:53

标签: sql oracle plsql

我有一个包含一系列字符串的列,包括数字作为字符串(在你们其中一个人提出它之前,ain&t; t更改的类型)

TableA:
ColA
-----
''
(NULL)
'5 Yippee'
'6 Yeps'
'7'
'8 Awesome'

我正在尝试根据数字输出。最初,假设此列中的所有数字后面都有一个空格。事实证明,他们不是。

到目前为止我已经

FOR x in 
(SELECT * FROM FUNCTION_THAT_OUTPUTS_COLA(var1,var2)) -- ColA, not Cola
LOOP
IF ColA is not null
    IF instr(x.ColA,' ') >0 -- There's a space in here
    THEN
      v_output.Col:= SUBSTR(x.ColA,1,INSTR(x.ColA,' '));
      PIPE ROW(v_output);
    ELSE
      v_output:= x.ColA;
      PIPE ROW(v_ouptut);
    END IF;
END IF;

不幸的是,虽然它剥离了null,但它也剥离了' 7'

这里的理想输出是:

'5'
'6'
'7'
'8'

任何人都可以帮助我,我的思绪完全是空白吗?

编辑:

发现它,这是我在这里转置它时修复的拼写错误

谢谢你们

1 个答案:

答案 0 :(得分:3)

如何使用正则表达式(regexp_substr

select result from (
    select regexp_substr(ColA, '[0-9]+',1,1) as result from tableA
) where result is not null

<强>输出

5 6 7 8