translate函数的用法

来源:互联网 发布:java web 超链接 编辑:程序博客网 时间:2024/04/29 03:03

以下内容是我在别的贴子上回答的,供参考
http://www.itpub.net/showthread.php...light=TRANSLATE
http://www.itpub.net/showthread.php...10&pagenumber=1

select translate('采sg大gd型矩gd阵356式服][12','0123456789'||'采sg大gd型矩gd阵356式服][12','0123456789') from dual;

TRANS
-----
35612


解释一下
translate(string,from_str,to_str)
执行时,translate依次检查string中的每个字符
然后查找这个字符是否在from_str中存在
如果不存在,那么这个string中的字符被保留,也就是被返回,
如果存在,那么,translate会记下这个字符在from_str中的位置,
然后用to_str的同样位置的字符代替string中的这个字符

from_str可以比to_str长,也就是from_str的字符数目可以比to_str多
在from_str中多出来的字符称为"额外字符",也就是from_str中的位置在
to_str中找不到的,比如
from_str 'abc123'
to_str 'abc'
这里from_str中的1的位置是4,但是to_str的总长度是3,没有4,
所以在from_STR中的123都是额外字符
如果from_str中的额外字符在string中出现,那么string中这些字符将在返回时被删除

举例如下
SQL> select translate('ab12','ab2','00') from dual;

TRA
---
001
这里a和b都被替换成了00,因为a在from_str中的位置是1,那么被to_str中的位置1的字符替换
b也是一样的处理,被to_str中的位置2的字符替换,依然是0
string中的1在from_str没有找到,所以被保留下来了
string中的2在from_str中找到了,但是是from_str的额外字符,因为2在from_str中的位置是3
而to_str中是没有3这个位置的,所以string中的2虽然在from_str中找到了,且处于3的位置,
但是TO_STR的长度是2,没有3这个位置,所以2在返回时被删除
得到的是001

另外to_str不能是NULL或者'',否则会返回空值
translate也不能用于CLOB

再说得简单一点,也就是
1、如果string中的字符如果在from_string中没有,那么返回时被保留
2、如果string中的字符是from_string中的"额外字符",那么返回时被删除
3、如果string中的字符在from_string中找到,且在to_string中有相应位置的字符,
那么返回时用to_string中的字符替换string中的字符