2015-05-14 82 views
0

有人可以幫我寫一個Oracle REGEXP_REPLACE語句破折號增加了一些像這樣...甲骨文REGEXP_REPLACE幫助增加破折號數字字符串

5310009618390 
5310-00-961-8390 

我想我需要REGEXP_REPLACE但也許不是,也許只是取而代之的工作。已經嘗試過,沒有得到任何地方。

select replace(t.column, 5310009618390, '-') from table t 
+1

您是否嘗試過SUBSTRING? SELECT SUBSTRING(t.column,0,4)+' - '+ SUBSTRING(t.column,4,2)+' - '等 – Melanie

+0

不,我沒有嘗試過Malanie。最終目標是更新數據庫,我現在只使用select進行測試。 –

+0

Oracle在regexp_replace上提供的第一個示例是電話號碼問題,它非常非常接近所提供的解決方案。 http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions137.htm#SQLRF06302。 –

回答

2

那麼首先你需要能夠描述你想要做什麼來理解如何構建表達式。例如,它看起來是:將前4個數字,後面2個數字,後面3個數字,後面4個數字分組。如果這是正確的:

select regexp_replace('5310009618390', '(\d{4})(\d{2})(\d{3})(\d{4})', '\1-\2-\3-\4') from dual; 

該表達式「記住」如上描述的基團,然後將它們顯示在它們之間的破折號。

能夠描述你想要做什麼很重要,因爲這將有助於你建立表達。即如果規則是對第1個4個字符(而不是數字)進行分組,則表達式會不同,等等。

請注意,此示例適用於REGEXP_REPLACE,根據您要操作的數據集的大小上。如果規則很簡單,那麼使用SUBSTR()將其切斷並將各部分連接起來可能會更快,並按照Melanie的建議添加破折號(僅在連接時使用||而不是+)。

+0

這工作完美加里,非常感謝你。對不起,我沒有把它弄清楚,因爲它應該是,但你釘了。我很感激。 –

+0

很高興爲您提供幫助,只要確保您已經考慮到數據可能存在於數據中的所有表單,因爲表達式取決於此。它是整個字符串嗎?嵌入一​​個字符串?總是一樣的長度?多個數字可能出現在字符串中?等等。 –

+0

是的,數字串永遠是相同的長度。這確實只是一次性的事情,所以解決了這個問題,現在可以繼續。再次感謝。 –