当前位置:数据库 > Oracle >>

oracle sql去掉汉字保留数字或字母

oracle sql去掉汉字保留数字或字母
 
首先讲一下oracle translate的用法:
 
一、语法
TRANSLATE(string,from_str,to_str)
二、用途
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE是REPLACE所提供的功能的一个超集。如果from_str比 to_str长,那么在 from_str中而不在to_str中的额外字符将从string中被删除,因为它们没有相应的替换字符。to_str不能为空。Oracle将空字符串解释为NULL,并且如果TRANSLATE中的任何参数为NULL,那么结果也是NULL。
三、transate使用示例
 
dw@dw>column col1 format a10
dw@dw>column col2 format a10
dw@dw>select translate('helloword',
  2                   'abcdefghijklmnopqrstuvwxyz',
  3                   'zyxwvutsrqponmlkjihgfedcba') col1,
  4         translate('hbcadhlk',
  5                   'abcdefghijklmnopqrstuvwxyz',
  6                   '123456') col2
  7  from dual;
 
COL1       COL2
---------- ----------
svooldliw  2314
 
已选择 1 行。
 
已用时间:  00: 00: 00.01
我们在实际工作中,经常用到的去掉汉字保留数字或字母,也有可能是去掉数字或字母,保留汉字。
本文将用oracle sql tranlsate函数实现去掉汉字、保留数字;去掉数字和母、保留汉字,本文所用到sql如下:
 
create table oracle_extract_number (
id number,
name varchar2(50)
);
 
insert into oracle_extract_number(id,name)  values(1,'32提取汉字中11222的333数44411字11');
insert into oracle_extract_number(id,name)  values(1,'ad提取汉字中11dddfw222的3ddd33数444dd11字11');
insert into oracle_extract_number(id,name)  values(1,'abd2提取汉字中11222的333数44ddd411字11');
insert into oracle_extract_number(id,name)  values(1,'45提取汉233字中1ddd1222ddd的333数44411字11');
insert into oracle_extract_number(id,name)  values(1,'78提取汉字中112SDD22的33ddad3数44ddfdf411字11');
 
commit;
1.用oracle translate去掉汉字和字母,提取数字
 
dw@dw>select id,name,
  2         translate(name, '#' ||
  3           translate(name, '0123456789', '#'), '/') "oracle extract number"
  4    from oracle_extract_number;
 
        ID NAME                                               oracle extract number
---------- -------------------------------------------------- ------------------------------
         1 32提取汉字中11222的333数44411字11                  32112223334441111
         2 ad提取汉字中11dddfw222的3ddd33数444dd11字11        112223334441111
         3 abd2提取汉字中11222的333数44ddd411字11             2112223334441111
         4 45提取汉233字中1ddd1222ddd的333数44411字11         45233112223334441111
         5 78提取汉字中112SDD22的33ddad3数44ddfdf411字11      78112223334441111
 
已选择5行。
 
已用时间:  00: 00: 00.03
2.用oracle translate去掉汉字,提取数字和字母
 
dw@dw>select id,name,
  2  translate(name,'#'||
  3  translate(name,'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','#')
  4  ,'/')  "oracle extract number"
  5  from oracle_extract_number;
 
        ID NAME                                               oracle extract number
---------- -------------------------------------------------- ------------------------------
         1 32提取汉字中11222的333数44411字11                  32112223334441111
         2 ad提取汉字中11dddfw222的3ddd33数444dd11字11        ad11dddfw2223ddd33444dd1111
         3 abd2提取汉字中11222的333数44ddd411字11             abd21122233344ddd41111
         4 45提取汉233字中1ddd1222ddd的333数44411字11         452331ddd1222ddd3334441111
         5 78提取汉字中112SDD22的33ddad3数44ddfdf411字11      78112SDD2233ddad344ddfdf41111
 
已选择5行。
 
已用时间:  00: 00: 00.00
3.用oracle translate去掉数字和字母,提取汉字
 
dw@dw>select id,
  2         name,
  3         translate(name,
  4                   '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
  5                   '/') "oracle extract number"
  6    from oracle_extract_number;
 
        ID NAME                                               oracle extract number
---------- -------------------------------------------------- ---------------------------
         1 32提取汉字中11222的333数44411字11                  提取汉字中的数字
         2 ad提取汉字中11dddfw222的3ddd33数444dd11字11        提取汉字中的数字
         3 abd2提取汉字中11222的333数44ddd411字11             提取汉字中的数字
         4 45提取汉233字中1ddd1222ddd的333数44411字11         提取汉字中的数字
         5 78提取汉字中112SDD22的33ddad3数44ddfdf411字11      提取汉字中的数字
 
已选择5行。
 
已用时间:  00: 00: 00.01
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,