我有last_name
列中的數據。oracle正則表達式替換(僅保留a-z)
這些數據來自於在線,有時用戶正在複製粘貼word文檔中的姓氏。當姓氏有單引號時,這是個問題。不知何故,單詞文檔中的單引號很奇怪。
我想在我的選擇查詢中編寫一個oracle正則表達式替換,這樣它將替換last_name
列中的所有內容,但只保留(a-z或A-Z)。
這是可行的嗎?
我有last_name
列中的數據。oracle正則表達式替換(僅保留a-z)
這些數據來自於在線,有時用戶正在複製粘貼word文檔中的姓氏。當姓氏有單引號時,這是個問題。不知何故,單詞文檔中的單引號很奇怪。
我想在我的選擇查詢中編寫一個oracle正則表達式替換,這樣它將替換last_name
列中的所有內容,但只保留(a-z或A-Z)。
這是可行的嗎?
'怪怪'你的意思是它不是正常的單引號? Word有一些默認使用的非常愚蠢的字符(稱爲'Smart quotes(google)',它看起來有點像標準引號,但是在轉換爲ASCII時有不同的行爲,例如UTF-8
他們在SQL中使用函數ASCIISTR進行選擇,並以<backslash><4 digits>
的形式查找子字符串(這適用於帶有UTF-8和simialr字符的數據庫,我不確定它是否在具有ASCII NLS參數的數據庫中返回)
select asciistr(COLUMN) from table
我用下面的代碼刪除它們在最近的一些工作,我一直在做
update jiraissue
set summary = replace(asciistr(summary), '\2013','-')
where asciistr(summary) like '%\2013%';`)
HTH
謝謝。我不知道asciistr函數。我不知道它是否是精明的報價,但它在oracle中顯示爲一個小方塊。 – 2010-12-21 21:32:47
可以使用REGEXP_REPLACE運營商如:
select regexp_replace('foobar1000!!!!','[[:cntrl:]]|[[[:digit:]]|[[:punct:]]') from dual;
REGEXP_REPLACE('FOOBAR1000!!!!','[[:CNTRL:]]|[[[:DIGIT:]]|[[:PUNCT:]]')
-----------------------------------------------------------------------
foobar
我喜歡regexp_replace的想法,但這會錯過控制字符和空格等..我會去這樣的: select regexp_replace('foo Bar1000 !!!!','[^ [:alpha:]] ')從雙重; – Craig 2010-12-21 21:48:47
終於我這個去:
REGEXP_REPLACE(mbr_last_name,'[^a-zA-Z'']','') replaced_last_name
我保持a到z A到Z和單引號
值得一看的CONVERT功能,它將做轉換n在字符集之間。您可以轉換爲'純文本'的7位ASCII字符以消除異常。
例如
選擇轉換從 ( 'EE', 'US7ASCII')雙;
如果姓氏是D'Angelo,會發生什麼?你需要小心你的正則表達式。 – 2010-12-21 19:36:21
是的,我想過。現在,我寧願將它轉換爲DAngelo。這必須到位,直到我們開始在提交到數據庫之前開始捕獲它爲止。 – 2010-12-21 19:38:15