----特殊符号对应的ASCII码------------
chr(9) tab空格 chr(10) 换行 chr(13) 回车 Chr(13)&chr(10) 回车换行
chr(32) 空格符 chr(34) 双引号 chr(39) 单引号
chr(33) ! chr(34) " chr(35) # chr(36) $ chr(37) %
chr(38) & chr(39) ' chr(40) ( chr(41) ) chr(42) *
chr(43) + chr(44) , chr(45) - chr(46) . chr(47) /
Chr(48) 0 Chr(49) 1 Chr(50) 2 Chr(51) 3 Chr(52) 4
Chr(53) 5 Chr(54) 6 Chr(55) 7 Chr(56) 8 Chr(57) 9
chr(58) chr(59) ; chr(60) < chr(61) = chr(62) >
chr(63) ? chr(64) @
chr(65) A chr(66) B chr(67) C chr(68) D chr(69) E
chr(70) F chr(71) G chr(72) H chr(73) I chr(74) J
chr(75) K chr(76) L chr(77) M chr(78) N chr(79) O
chr(80) P chr(81) Q chr(82) R chr(83) S chr(84) T
chr(85) U chr(86) V chr(87) W chr(88) X chr(89) Y
chr(90) Z
chr(91) [ chr(92) \ chr(93) ] chr(94) ^ chr(95) _
chr(96) `
chr(97) a chr(98) b chr(99) c chr(100) d chr(101) e
chr(102) f chr(103) g chr(104) h chr(105) i chr(106) j
chr(107) k chr(108) l chr(109) m chr(110) n chr(111) o
chr(112) p chr(113) q chr(114) r chr(115) s chr(116) t
chr(117) u chr(118) v chr(119) w chr(120) x chr(121) y
chr(122) z
chr(123) { chr(124) | chr(125) } chr(126) ~ chr(127)
chr(128) chr(153)? chr(169) ? chr(174) ?
--END------------------------------------------------------------------------------------
chr(9) 是制表符
chr(13) 是一个回车
chr(10) 是个换行符
chr(32) 是一个空格符
‘&’符号在SQL中有特殊含义,所以在SQL中想要写入&,需要特殊处理。
用Oracle的字符串处理函数chr处理。chr(38)表示 &符号
如:select chr(38) from dual;
SQL> select 'a'||chr(38)||'b' from dual;
结果:a&b
如:select ascii('&') from dual;
再附一个单引号(')的例子(I'm OK):
SELECT 'I' || '''m OK' from dual;
SELECT 'I''m OK' from dual;
SELECT 'I'||Chr(39)||'m OK' FROM dual;
前两个都是转义字符(只是用不用连接符||的区别),第3中是一个字符替换。
还是用translate 可以过滤掉一个字符集合
replace 只能过滤掉指定字符
1.translate
语法:TRANSLATE(char, from, to)
用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。
若from比to字符串长,那么在from中比to中多出的字符将会被删除。
三个参数中有一个是空,返回值也将是空值。
举例:SQL> select translate('abcdefga','abc','wo') 返回值 from dual;
返回值
-------
wodefgw
分析:该语句要将'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中找不到与之对应的字符,返回值中的该字符将会被删除。
在实际的业务中,可以用来删除一些异常数据,
比如表a中的一个字段t_no表示电话号码,
而电话号码本身应该是一个由数字组成的字符串,
为了删除那些含有非数字的异常数据,
就用到了translate函数:
SQL> delete from a,
where length(translate(trim(a.t_no),
'0123456789' || a.t_no,
'0123456789')) <> length(trim(a.t_no));
2.replace
语法:REPLACE(char, search_string,replacement_string)
用法:将char中的字符串search_string全部转换为字符串replacement_string。
举例:SQL> select REPLACE('fgsgswsgs', 'fk' ,'j') 返回值 from dual;
返回值
---------
fgsgswsgs
SQL> select REPLACE('fgsgswsgs', 'sg' ,'eeerrrttt') 返回值 from dual;
返回值
-----------------------
fgeeerrrtttsweeerrrttts
分析:第一个例子中由于'fgsgswsgs'中没有与'fk'匹配的字符串,
故返回值仍然是'fgsgswsgs';
第二个例子中将'fgsgswsgs'中的字符串'sg'全部转换为'eeerrrttt'。
总结:综上所述,replace与translate都是替代函数,
只不过replace针对的是字符串,而translate针对的是单个字符。
---cxmr501a------------------------------------
####20120424 BY XXXX**********************************************************
## 处理特殊符号对报表造成的影响,将特殊符号替换成空格
## 注意每次只能提交一个符号,如先回车再换行
## 要注意chr(13)||chr(10) 此类结合使用的情况比较多
## 制表符 chr(9)
## 换行符 chr(10)
## 回车符 chr(13)
SELECT REPLACE(ta_cno33,chr(13)||chr(10),' '),
REPLACE(ta_cno34,chr(13)||chr(10),' '),
REPLACE(ta_cno35,chr(13)||chr(10),' '),
REPLACE(ta_cno36,chr(13)||chr(10),' '),
REPLACE(ta_cno37,chr(13)||chr(10),' '),
REPLACE(ta_cno38,chr(13)||chr(10),' ')
INTO cno.ta_cno33,cno.ta_cno34,cno.ta_cno35,
cno.ta_cno36,cno.ta_cno37,cno.ta_cno38
FROM cno_file WHERE cno01=cno.cno01
SELECT REPLACE(ta_cno33,chr(10),' '),
REPLACE(ta_cno34,chr(10),' '),
REPLACE(ta_cno35,chr(10),' '),
REPLACE(ta_cno36,chr(10),' '),
REPLACE(ta_cno37,chr(10),' '),
REPLACE(ta_cno38,chr(10),' ')
INTO cno.ta_cno33,cno.ta_cno34,cno.ta_cno35,
cno.ta_cno36,cno.ta_cno37,cno.ta_cno38
FROM cno_file WHERE cno01=cno.cno01
####END**********************************************************************