Sql 如果有一个行为不端的仪表

Sql 如果有一个行为不端的仪表,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个包含一系列字符串的列,其中包括作为字符串的数字(在你们中的一个建议之前,类型没有改变) 我正在尝试根据数字进行输出。最初,假设此列中的所有数字后面都有一个空格。事实证明,事实并非如此 到目前为止我有 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

我有一个包含一系列字符串的列,其中包括作为字符串的数字(在你们中的一个建议之前,类型没有改变)

我正在尝试根据数字进行输出。最初,假设此列中的所有数字后面都有一个空格。事实证明,事实并非如此

到目前为止我有

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'
有人能帮我吗?我的脑子一片空白

编辑:

找到了,这是一个错别字,当我在这里转置它时,它被修复了


谢谢大家

使用正则表达式()

输出

5
6.
7.

8

使用正则表达式()

输出

5
6.
7.

8

编辑你的问题并提供你想要的结果。@GordonLinoff编辑如果你发布了编译过的代码,并且是完整的-包括类型声明,这段代码是一个完整的函数(不管值是否来自表或集合,它只需演示你的问题),你可以独立运行。试图修补错误和打字错误,这似乎是你想要做的,这使得很难告诉你什么是错的。您还可以澄清您的值是否包含单引号,以及
(NULL)
是否表示该值实际上为NULL吗?@AlexPoole-代码不会执行OP想要的操作,因为他正在输入字符串中搜索空格以指示前导“数字”的结尾。当整个字符串只是数字时,将没有空格,因此INSTR返回0,SUBSTR返回null。@mathguy-但是它进入
else
而根本不执行
SUBSTR
?不管怎样,它似乎可以处理样本数据。还有更好的方法……编辑您的问题并提供您想要的结果。@GordonLinoff Edits madeIt如果您发布的代码经过编译,并且是完整的,包括类型声明,这段代码的完整函数(不管值是否来自表或集合,它只需演示您的问题),并且您可以独立运行。尝试修补错误和打字错误,这似乎确实符合您的要求,这使得您很难判断错误所在。您是否还可以澄清您的值是否包含单引号,以及
(NULL)是否
表示该值实际上为空?@AlexPoole-该代码不会执行OP想要的操作,因为他正在输入字符串中搜索一个空格,以指示前导“number”的结尾。当整个字符串只是一个数字时,将没有空格,因此INSTR返回0,SUBSTR返回null。@mathguy-但是它进入
else
,而根本不做
SUBSTR
?无论如何,它似乎可以处理示例数据。不过,更好的方法是这样做……这是正确的想法。我认为
'^[0-9]+“
可能更合适,但这是一个诡辩(数字是否必须从字符串开头开始)。@GordonLinoff没有指定数字是否在开头-这就是为什么我没有把
^
放进去。但是,如果是,那么你是对的。这是正确的想法。我认为
^[0-9]+“
可能更合适,但这是一个诡辩(数字是否必须从字符串的开头开始)。@GordonLinoff没有指定数字是否在开头-这就是为什么我没有把
^
放进去。但是,如果是,那么你是对的。。
'5'
'6'
'7'
'8'
select result from (
    select regexp_substr(ColA, '[0-9]+',1,1) as result from tableA
) where result is not null