2016-09-05 3 views
0
обнаружено нарушение

У меня есть столбец, содержащий набор строк, в том числе чисел в виде строк (и до того один из вас предлагает это, тип не меняется)IF с INSTR

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; 

К сожалению, в то время как он раздевает нуль, также срывает '7'

Идеальный выход здесь является:

'5' 
'6' 
'7' 
'8' 
Может

кто поможет меня здесь, мой разум совершенно пуст?

Edit:

Нашел, это была опечатка, что было зафиксировано, когда я транспонировать его здесь

Спасибо, ребята

+0

Измените свой вопрос и предоставите желаемый результат. –

+0

@GordonLinoff Редактировано – JohnHC

+0

Это поможет, если вы разместили код, который был скомпилирован и был полным - включите объявления типа, полную функцию, от которой этот фрагмент (неважно, действительно ли значение действительно получено из таблицы или коллекции, это просто должен продемонстрировать вашу проблему), и что вы можете работать автономно. Пытаясь исправить ошибки и опечатки, это, похоже, делает то, что вы хотите, из-за чего сложно сказать вам, что не так. Можете ли вы также уточнить, включают ли ваши значения одиночные кавычки, а если '(NULL)' означает, что значение на самом деле равно нулю? –

ответ

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

+1

Это правильная идея. Я думаю, что ''^[0-9] + ''может быть более уместным, но это каламбур (должны ли цифры начинаться в начале строки). –

+0

@GordonLinoff Не указано, являются ли цифры в начале или нет, поэтому я не поставил '^'. Однако, если они есть, тогда вы правы. – Plirkee