Oracle是否有内置的字符串字符类常量(数字,字母,字母,上限,下限等)?
我的实际目标是只从现有字符串中有效地返回数字[0-9]。
不幸的是,我们仍然使用Oracle 9,所以这里不能选择正则表达式。
实施例 该字段应包含0到3个字母,3或4位数字,然后是0到2个字母。我想提取数字。
String --> Result
ABC1234YY --> 1234
D456YD --> 456
455PN --> 455
答案 0 :(得分:1)
答案 1 :(得分:1)
没有字符串常量,但你可以这样做:
select translate
( mystring
, '0'||translate (mystring, 'x0123456789', 'x')
, '0'
)
from mytable;
例如:
select translate
( mystring
, '0'||translate (mystring, 'x0123456789', 'x')
, '0'
)
from
( select 'fdkhsd1237ehjsdf7623A@L:P' as mystring from dual);
TRANSLAT
--------
12377623
如果你想经常这样做,你可以把它作为一个函数包装起来:
create function only_digits (mystring varchar2) return varchar2
is
begin
return
translate
( mystring
, '0'||translate (mystring, 'x0123456789', 'x')
, '0'
);
end;
/
然后:
SQL> select only_digits ('fdkhsd1237ehjsdf7623A@L:P') from dual;
ONLY_DIGITS('FDKHSD1237EHJSDF7623A@L:P')
-----------------------------------------------------------------
12377623
答案 2 :(得分:1)
如果你能在这里使用PL / SQL,另一种方法是编写自己的正则表达式匹配器函数。一个起点是Rob Pike在Beautiful Code第1章中优雅,非常小的正则表达式匹配器。读者的练习之一是添加角色类。 (您首先需要将他的30行C代码翻译成PL / SQL。)