提取数字函数之 translate

获取所有的数字:
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;
 
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

获取数字:
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中找不到与之对应的字符,返回值中的该字符将会被删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值