Regex 正则表达式从字符串oracle中提取正数或负数

Regex 正则表达式从字符串oracle中提取正数或负数,regex,oracle,Regex,Oracle,我正在努力找到以下问题的解决方案: 假设字符的值为512a、-1230b、-2和2。 可通过以下查询将其获取到表中: with my_input_values as ( select '512a' my_val from dual union select '-1230b' my_val from dual union select '2' my_val from dual union select '-2' my_val from dual ) select * from my_input

我正在努力找到以下问题的解决方案:

假设字符的值为512a、-1230b、-2和2。
可通过以下查询将其获取到表中:

with my_input_values as (
select '512a' my_val from dual union select '-1230b' my_val from dual union select '2' my_val from dual union select '-2' my_val  from dual
) 
select * from my_input_values;
with result as (
    select 512 my_val from dual union select -1230 my_val from dual union select 2 my_val from dual union select -2 my_val from dual
)
select * from result;
我试图构建一个正则表达式,从每个值中提取保留正负号的数字

预期结果为以下数值:512、-1230、2和-2。
可通过以下查询获取到表中:

with my_input_values as (
select '512a' my_val from dual union select '-1230b' my_val from dual union select '2' my_val from dual union select '-2' my_val  from dual
) 
select * from my_input_values;
with result as (
    select 512 my_val from dual union select -1230 my_val from dual union select 2 my_val from dual union select -2 my_val from dual
)
select * from result;

您可以匹配一个可选字符(或者使用asterix
*
而不是
来匹配零个或多个字符),后跟引号。然后可以用空字符串替换该匹配项


为确保答案的完整性,完成此任务的Oracle代码如下:

select regexp_replace('-asd51assaddasd2a', '[a-z]?') from dual;
它成功地产生了一个保持极性符号的数字场

select -512 from dual;

我不明白。上面的第一个代码块表示SQL语句还是文本字符串?显然是一个SQL语句,用于获取PCN上的值是您的数字整数?可能预期结果是
512
-1230
2
,而不是整个联合查询?此外,模式是否始终位于字符串的开头,或者可能是例如
blahblah512bananas
abc-xyz-whatever42
?我给出了一个可复制的示例,因此,这是唯一的模式。然而,@Thefourhbird答案在任何情况下都有效!很酷的解决方案,因为它删除了字符串中的所有字母字符,而不考虑顺序!我只是注意到它不排除大写字符。如何更改它,使其同时考虑小写和大写字符?您可以使用
[a-zA-Z]?“
您可以使用
[a-zA-Z]?”
它应该是
从dual中选择regexp_replace(…,“[a-Z]?”)根据您的问题。为什么我必须在“-1230b”之后添加“”:单引号是必要的,以告诉oracle,-1230b是一个字符,而不是名为“b”的数值列,并将其值化为-1230