0

Oracle 是否有内置的字符串字符类常量(数字、字母、字母数字、大写字母、小写字母等)?

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

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

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

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

3 回答 3

1

您可以在此处查看 Oracle 上预定义数据类型的列表,但您不会找到您要查找的内容。

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

如果你提供一个更简洁的例子会更容易给你一个详细的解决方案。

于 2009-07-14T13:19:47.437 回答
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
于 2009-07-14T13:25:48.740 回答
1

如果您能够在这里使用 PL/SQL,另一种方法是编写您自己的正则表达式匹配器函数。一个起点是 Rob Pike 在Beautiful Code的第 1 章中提出的优雅的、非常小的正则表达式匹配器。读者的练习之一是添加字符类。(您首先需要将他的 30 行 C 代码翻译成 PL/SQL。)

于 2009-07-14T13:37:55.200 回答