Oracle Builtin字符串字符类

时间:2009-07-14 13:03:23

标签: oracle string oracle9i

Oracle是否有内置的字符串字符类常量(数字,字母,字母,上限,下限等)?

我的实际目标是只从现有字符串中有效地返回数字[0-9]。

不幸的是,我们仍然使用Oracle 9,所以这里不能选择正则表达式。

实施例 该字段应包含0到3个字母,3或4位数字,然后是0到2个字母。我想提取数字。

String    --> Result
ABC1234YY --> 1234
D456YD    --> 456
455PN     --> 455

3 个答案:

答案 0 :(得分:1)

您可以在Oracle here上查看预定义数据类型的列表,但是您无法找到您要查找的内容。

要提取字符串的数字,您可以使用这些函数的某些组合:

如果您提供更简洁的示例,将更容易为您提供详细的解决方案。

答案 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。)