2014-03-31 55 views
0

我有一個類型爲VARCHAR2的列,它的文本類似於'12-MAR-2014,,1234,DATA,VALUE,12/03/14,,124,End'。我需要的輸出是,'%DATA%VALUE%End%'。即文本將由逗號','分隔。只需要選擇字母,而不用輸入日期或數字或特殊字符。喜歡的東西,僅從VARCHAR列中提取字母字符

select some_function('12-MAR-2014,,1234,DATA,VALUE,12/03/14,,124,End') as output from dual; 

OUTPUT 
--------- 
%DATA%VALUE%End% 

編輯:

另外補充要求,其中的字母數字值需要保留:

select some_function('12-MAR-2014,,1234,DATA65,VALUE,12/03/14,,124,End') as output from dual; 

OUTPUT 
--------- 
%DATA65%VALUE%End% 

回答

1

像這樣的東西可以幫助你:

select regexp_replace('12-MAR-2014,,1234,DATA,VALUE,12/03/14,,124,End','[[0-9]{2}-(JAN|FEB|MAR|APR|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-[0-9]{4}]*|[^a-zA-Z]+|$','%') from dual 
+0

完美地工作,但我試圖使這個工作的字母數字字符,如選擇regexp_replace('12 - MAR-2014,1234,DATA65,VALUE,12/03/14,124,結束',[[[0 -9] {2} - (JAN | FEB | MAR | APR | JUN | JUL | AUG | SEP | OCT | NOV | DEC) - [0-9] {4}] * | [^ [A-ZA-Z ] + [0-9] *] | $','%')from dual。但似乎並不奏效,我知道我錯過了一些非常明顯的東西。 – zephyrus

1

您可以使用regexp_replace()。我認爲表達式是這樣的:

select regexp_replace(col, '([^a-zA-Z]+)', '%') 

不幸的是,我現在不能測試這個(SQL小提琴是關閉的)。

+1

遺憾將無法正常工作 - 「MAR」對應的模式,但不應該是結果。 :( –