解决甲骨文字符串中包含数字,特殊符号的排序问题

  

  

某小区,需要按照小区,楼栋,单元号,房间号进行排序,但是按照地址描述排序时,因为字符串中包含数字,所以造成了如下的结果,

  

1号楼之后应该是2号楼,但是查询结果却是10号楼。

  

解决甲骨文字符串中包含数字,特殊符号的排序问题

  

尝试解决

  

使用正则表达式替换

  

解决甲骨文字符串中包含数字,特殊符号的排序问题

  

结果:   

虽然楼栋号排序正常了,但是会发现房间号排序出现了混乱又是;继续想办法

  

终极办法:

  

使用翻译函数

  

解决甲骨文字符串中包含数字,特殊符号的排序问题

  

可以发现,结果正常显示。

  

  

<强>一、语法:

  

<代码>翻译(字符串、from_str to_str)

  

<强>二、目的

  

返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string.TRANSLATE是替换所提供的功能的一个超集。如果from_str比to_str长,那么在from_str中而不在to_str中的额外字符将从字符串中被删除,因为它们没有相应的替换字符.to_str不能为空.Oracle将空字符串解释为NULL,并且如果中翻译的任何参数为零,那么结果也是NULL。

  

<强>三,允许使用的位置

  

过程性语句和SQL语句。

  

<强>四,示例

  

Sql代码         选择翻译(‘abcdefghij’,‘六边形abcdef’,‘123456’)双;   翻译(   --------------   123456 ghij   选择翻译(‘abcdefghij’,‘abcdefghij’,‘123456’)双;   TRANSL   ----------   123456年      

语法:TR <代码> ANSLATE(从,expr)

  

expr:代表一串字符,从与是从左到右一一对应的关系,如果不能对应,则视为空值。

  

举例:
  

        选择翻译(“abcbbaadef”、“ba”、“# @”)从双(b将被#替代,一个将被@替代)   选择翻译(“abcbbaadef”,“坏”,“# @”)从双(b将被#替代,一个将被@替代,d对应的值是空值,将被移走)      

因此:结果依次为:@ # c # # @@def c和@ # # # @@ef

  

语法:<代码>翻译(从,expr)

  

expr:代表一串字符,从与是从左到右一一对应的关系,如果不能对应,则视为空值。

  

举例:         选择翻译(“abcbbaadef”、“ba”、“# @”)从双(b将被#替代,一个将被@替代)   选择翻译(“abcbbaadef”,“坏”,“# @”)从双(b将被#替代,一个将被@替代,d对应的值是空值,将被移走)      

因此:结果依次为:@ # c # # @@def c和@ # # # @@ef

  

示例如下:

  

,示例一:将数字转换为9,其他的大写字母转换为X,然后返回。

        选择翻译(‘2 krw229’,‘0123456789 abcdefghijklmnopqrstuvwxyz’,‘9999999999 xxxxxxxxxxxxxxxxxxxxxxxxxx’)“许可证”双重      

示例二:将数字保留,将其他的大写字母移除。

        选择翻译(‘2 krw229’,‘0123456789 abcdefghijklmnopqrstuvwxyz’,‘0123456789’)“翻译例子”双重      

罗勇补充示例如下:

  

示例三:示例证明是按照字符来处理,不是按照字节来处理,如果to_string的字符数比from_string多的话,多出的字符数似乎没有什么用处,也不会引发异常。

        选择翻译(“我是中国人,我爱中国”,“中国”,“中国”)“翻译例子”   从双      

示例四:下面的示例证明,如果from_string的字符数大于to_string,那么多出的字符会被移除,也就是在三个字符会从char参数中移除,当然区分大小写啦。

  

        选择翻译(“我是中国人,我爱中国”、“中国”、“中国”)“翻译例子”   从双      

示例五:以下示例证明,如果第二个参数为空字符串,整个返回零。

        选择翻译(“2 krw229”,   “0123456789 abcdefghijklmnopqrstuvwxyz”,   ”)“许可证”   从双      

示例六:在银行转帐时经常看见账户人只显示姓名的最后一个字,其余的用星号代替,我就用翻译来做个类似的东西吧。

解决甲骨文字符串中包含数字,特殊符号的排序问题