题目形貌:
某小区,须要根据小区、楼栋、单位号、房间号举行排序,然则根据地点形貌排序时,由于字符串中包括数字,所以造成了以下的效果,
1号楼今后应该是2号楼,然则查询效果倒是10号楼 。
尝试处置惩罚
运用正则表达式替换
效果:
虽然楼栋号排序一般了,然则会发明房间号排序涌现了杂沓。 继承想要领
最终要领:
运用translate函数
能够发明,效果一般显现 。
以下附上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。
三、许可运用的位置
历程性语句和SQL语句。
四、示例
Sql代码
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; TRANSLATE ( -------------- 123456ghij SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; TRANSL ---------- 123456
语法:TRANSLATE(expr,from,to)
expr: 代表一串字符,from 与 to 是从左到右一一对应的关联,假如不能对应,则视为空值。
举例:
select translate('abcbbaadef','ba','#@') from dual (b将被#替换,a将被@替换) select translate('abcbbaadef','bad','#@') from dual (b将被#替换,a将被@替换,d对应的值是空值,将被移走)
因而:效果依次为:@#c##@@def 和@#c##@@ef
语法:TRANSLATE(expr,from,to)
expr: 代表一串字符,from 与 to 是从左到右一一对应的关联,假如不能对应,则视为空值。
举例:
select translate('abcbbaadef','ba','#@') from dual (b将被#替换,a将被@替换) select translate('abcbbaadef','bad','#@') from dual (b将被#替换,a将被@替换,d对应的值是空值,将被移走)
因而:效果依次为:@#c##@@def 和@#c##@@ef
示例以下:
示例一:将数字转换为9,其他的大写字母转换为X,然后返回。
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') "License"FROM DUAL
示例二:将数字保存,将其他的大写字母移除。
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789') "Translate example"FROM DUAL
罗勇补充示例以下:
示例三:示例证实是根据字符来处置惩罚,不是根据字节来处置惩罚,假如to_string的字符数比from_string多的话,多出的字符数好像没有什么用途,也不会激发非常。
SELECT TRANSLATE('我是中国人,我爱中国', '中国', 'China') "Translate example" FROM DUAL
示例四:下面的示例证实,假如from_string的字符数大于to_string,那末多出的字符会被移除,也就是ina三个字符会从char参数中移除,固然辨别大小写啦。
SELECT TRANSLATE('I am Chinese, I love China', 'China', '中国') "Translate example" FROM DUAL
示例五:以下示例证实,假如第二个参数为空字符串,全部返回null。
SELECT TRANSLATE('2KRW229', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '') "License" FROM DUAL
示例六:在银行转帐时经常看见账户人只显现姓名的末了一个字,其他的用星号替代,我就用translate来做个相似的东西吧。
SELECT TRANSLATE('中国人', substr('中国人',1,length('中国人') - 1), rpad('*',length('中国人'),'*')) "License" FROM DUAL
假如人人碰到此类题目,就能够根据以上的要领尝试一下。
相干引荐:
关于Oracle 中Contains 函数的用法总结
详解oracle分页查询的基本道理
Oracle顺序开辟小技能
以上就是Oracle字符串中包括数字、特殊符号的排序题目处置惩罚要领的细致内容,更多请关注ki4网别的相干文章!