表中的一列值有字符和数字,如何将两者通过查询筛选出来

方法有多种下面主要使用了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

posted @ 2017-01-11 11:59  lipera  阅读(1702)  评论(0编辑  收藏  举报