获取所有的数字:
create or replace function get_num(temp varchar2) return varchar2 is
Result varchar2(100) := '';
g_Value varchar2(100) := trim(temp);
g_Value_Len number := to_number(nvl(length(g_Value), '0'));
begin
for i in 1 .. g_Value_Len loop
if translate(substr(g_Value, i, 1), '\1234567890', '\') is null then
Result := Result || substr(g_Value, i, 1);
end if;
end loop;
return(Result);
end get_num;
Result varchar2(100) := '';
g_Value varchar2(100) := trim(temp);
g_Value_Len number := to_number(nvl(length(g_Value), '0'));
begin
for i in 1 .. g_Value_Len loop
if translate(substr(g_Value, i, 1), '\1234567890', '\') is null then
Result := Result || substr(g_Value, i, 1);
end if;
end loop;
return(Result);
end get_num;
SQL> SET SERVEROUTPUT ON;
SQL> declare
out_num number;
begin
out_num := get_num('254名字性别56介绍123');
dbms_output.put_line(out_num);
end;
/
25456123
out_num number;
begin
out_num := get_num('254名字性别56介绍123');
dbms_output.put_line(out_num);
end;
/
25456123
获取数字:
Select translate('254名字性别56介绍123','1234567890名字性别介绍','1234567890') From dual;
TRANSLATE函数:
TRANSLATE ( expr , from_string , to_string )
Purpose:
TRANSLATE returns expr with all occurrences of each character in from_string replaced by its corresponding character in to_string.
用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。
若from比to字符串长,那么在from中比to中多出的字符将会被删除。
三个参数中有一个是空,返回值也将是空值。
SQL> Select translate('254名字性别56介绍123','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('254名字性别56介绍12
------------------------------
25456123
SQL> Select translate('254名字性别介绍','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('254名字性别介绍','1
------------------------------
254
SQL> Select translate('名字性别介绍567','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('名字性别介绍567','1
------------------------------
567
SQL> Select translate('名字56789性别介绍','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('名字56789性别介绍',
------------------------------
56789
SQL> select translate('abcdefga','abc','wo') 返回值 from dual;
返回值
-------
wodefgw
SQL> select translate('abcdefgab','abc','wo') 返回值 from dual;
返回值
--------
wodefgwo
SQL> select translate('abcdefgabb','abc','wo') 返回值 from dual;
返回值
---------
wodefgwoo
分析:该语句要将'abcdefga'中的'abc'转换为'wo',
由于'abc'中'a'对应'wo'中的'w',
故将'abcdefga'中的'a'全部转换成'w';
而'abc'中'b'对应'wo'中的'o',
故将'abcdefga'中的'b'全部转换成'o';
'abc'中的'c'在'wo'中没有与之对应的字符,
故将'abcdefga'中的'c'全部删除;
总之,就是将from中的字符转换为to中与之位置对应的字符,
若to中找不到与之对应的字符,返回值中的该字符将会被删除。
TRANSLATE ( expr , from_string , to_string )
Purpose:
TRANSLATE returns expr with all occurrences of each character in from_string replaced by its corresponding character in to_string.
用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。
若from比to字符串长,那么在from中比to中多出的字符将会被删除。
三个参数中有一个是空,返回值也将是空值。
SQL> Select translate('254名字性别56介绍123','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('254名字性别56介绍12
------------------------------
25456123
SQL> Select translate('254名字性别介绍','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('254名字性别介绍','1
------------------------------
254
SQL> Select translate('名字性别介绍567','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('名字性别介绍567','1
------------------------------
567
SQL> Select translate('名字56789性别介绍','1234567890名字性别介绍’','1234567890') From dual;
TRANSLATE('名字56789性别介绍',
------------------------------
56789
SQL> select translate('abcdefga','abc','wo') 返回值 from dual;
返回值
-------
wodefgw
SQL> select translate('abcdefgab','abc','wo') 返回值 from dual;
返回值
--------
wodefgwo
SQL> select translate('abcdefgabb','abc','wo') 返回值 from dual;
返回值
---------
wodefgwoo
分析:该语句要将'abcdefga'中的'abc'转换为'wo',
由于'abc'中'a'对应'wo'中的'w',
故将'abcdefga'中的'a'全部转换成'w';
而'abc'中'b'对应'wo'中的'o',
故将'abcdefga'中的'b'全部转换成'o';
'abc'中的'c'在'wo'中没有与之对应的字符,
故将'abcdefga'中的'c'全部删除;
总之,就是将from中的字符转换为to中与之位置对应的字符,
若to中找不到与之对应的字符,返回值中的该字符将会被删除。