从字符串中删除不需要的字符
问题从数据中删除指定的字符,考虑下列的结果集:
ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
要得到如下所示的STRIPPED1和STRIPPED2列中的值,删除所有的0和元音字母:
ENAME STRIPPED1 SAL STRIPPED2
---------- ---------- ---------- ---------
SMITH SMTH 800 8
ALLEN LLN 1600 16
WARD WRD 1250 125
JONES JNS 2975 2975
MARTIN MRTN 1250 125
BLAKE BLK 2850 285
CLARK CLRK 2450 245
SCOTT SCTT 3000 3
KING KNG 5000 5
TURNER TRNR 1500 15
ADAMS DMS 1100 11
JAMES JMS 950 95
FORD FRD 3000 3
MILLER MLLR 1300 13
解决方案
每个DBMS都提供了函数用来从字符串中删除不需要的字符,对于本问题来说,常用的就是REPLACE和TRANSLATE函数。
DB2
使用内置的TRANSLATE和REPLACE 函数来删除不需要的字符或字符串:
1 select ename,
2 replace(translate(ename,'aaaaa','AEIOU'),'a','') stripped1,
3 sal,
4 replace(cast(sal as char(4)),'0','') stripped2
5 from emp
MySQL和SQL Server
MySQL和SQL Server 不支持TRANSLATE函数,所以就需要多次调用REPLACE函数来执行此操作:
1select ename,
2 replace(
3 replace(
4 replace(
5 replace(
6 replace(ename,'A',''),'E',''),'I',''),'O',''),'U','')
7 as stripped1,
8 sal,
9 replace(sal,0,'') stripped2
10 from emp
Oracle和PostgreSQL
使用内置的TRANSLATE和REPLACE函数来删除不需要的字符或字符串:
1select ename,
2 replace(translate(ename,'AEIOU','aaaaa'),'a')
3 as stripped1,
4 sal,
5 replace(sal,0,'') as stripped2
6 from emp
讨论
使用内置的REPLACE函数删除字符串中所有的0,而要删除元音字母,使用TRANSLATE将所有的元音字符转换为一个指定的字符(在这里使用“a”,可以使用任意字符),然后使用REPLACE函数将该字符从字符串中全部删除掉。
页:
[1]