oracle 按.反轉或按空格反轉之REGEXP_REPLACE應用

wenhual43發表於2013-07-25
今天有同事問我,0.450000000838.450000000216.450000000150.450000000146
如何轉換為:450000000146.450000000150.450000000216.450000000838.0
按照標點符號,反轉 。
我依稀記得可以用正規表示式,實在不行可以自己寫個函式處理。
於是開始了我的探索路程了。

reverse,這個不行,不符合我們的需求。

最後我寫成這樣:

 select REGEXP_REPLACE('0.450000000838.450000000216.450000000150.450000000146',
                      '(\S+)\.(\S+)\.(\S+)\.(\S+)\.(\S+)$',
                      '\5.\4.\3.\2.\1') AS "names after regexp"
  from dual; 

haha,  ok!啦

解釋一下:第一個引數是原始的字串,第二個是匹配模式,分成5段,每一段以"."分隔,(\S+) 代表非空格字元,$ 表示結束,第三個引數,\5,表示第5個分組的字元,就是原來字元的最後一個字串啦,“.“ 是插入點的意思啦。

簡單吧。看樣子,正規表示式還是要好好學習,可以省好多功夫哦!

上面是用小數點隔開的,若是空格,替換的表示式\.  --&gt \s 就ok了,\s 表示空格的意思。

參考 Oracle® Database Advanced Application Developer's Guide
Using Regular Expressions in Database Applications


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25027760/viewspace-767088/,如需轉載,請註明出處,否則將追究法律責任。

相關文章