首页 > 代码库 > 表中的一列值有字符和数字,如何将两者通过查询筛选出来
表中的一列值有字符和数字,如何将两者通过查询筛选出来
方法有多种下面主要使用了Oracle自带的一个函数来实现
函数: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。
筛选纯数字:
SELECT A.COL FROM A
WHERE TRANSLATE(A.COL,‘*0123456789‘,‘*‘) IS NULL;
TRANSLATE函数的其他应用:
1、将数字转换为1,其他的大写字母转换为X(大小写有区别),然后返回
SELECT TRANSLATE(‘8QKW119‘,‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ‘,‘9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX‘) "Translate example"FROM DUAL;
2、将数字保留,将其他的大写字母移除。
SELECT TRANSLATE(‘8QKW119‘,‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ‘,‘0123456789‘) "Translate example"FROM DUAL
3、示例证明TRANSLATE函数是按照字符来处理,不是按照字节来处理,如果to_string的字符数比from_string多的话,多出的字符数没有什么用处,也不会引发异常。
SELECT TRANSLATE(‘我是中国人,我爱中国‘, ‘中国‘, ‘China‘) "Translate example" FROM DUAL
4、下面示例证明,如果from_string的字符数大于to_string,那么多出的字符会被移除
SELECT TRANSLATE(‘I am Chinese, I love China‘, ‘China‘, ‘中国‘) "Translate example"
FROM DUAL
ina三个字符会从char参数中移除,当然区分大小写
5、以下示例证明,如果第二个参数为空字符串,整个返回null
SELECT TRANSLATE(‘8QKW119‘,
‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ‘,
‘‘) "License"
FROM DUAL
6、将名字进行替换,只保留最后的一个字 例如:“张晓亮”变为“**亮”
select translate(‘上官可文‘,SUBSTR(‘上官可文‘,1,LENGTH(‘上官可文‘)-1),lpad(‘*‘,LENGTH(‘上官可文‘)-1,‘*‘)) from dual
表中的一列值有字符和数字,如何将两者通过查询筛选出来