簡體   English   中英

oracle sql regexp_replace

[英]oracle sql regexp_replace

我有一個具有這樣的值的表。

ExpTable

+--------+   
|expCol  | 
+--------+
|abc.abc |
|bcd.123 |
|efg.@/. |
+--------+

而我想要的是,當句點之后的字符是字母或數字時,輸出將在點之后添加一個空格,如下所示:

預期產出

+--------+   
|expCol  | 
+--------+
|abc. abc|
|bcd. 123|
|efg.@/. | --the value here stays the same because after the period is not a letter/number
+--------+

我試過了:

SELECT REGEXP_REPLACE(expCol, '.', '. ') from expTable WHERE /*condition*/

正如所料,包括最后一個值'efg。@ /'在內的一切。 在這期間之后有一個空間。 我不知道在WHERE子句中放什么。

SELECT REGEXP_REPLACE(expCol, '\.([a-zA-Z0-9])', '. \1') AS expCol FROM expTable

要么

SELECT REGEXP_REPLACE(expCol, '[.]([a-zA-Z0-9])', '. \1') AS expCol FROM expTable

產量

EXPCOL
abc. abc
bcd. 123
efg.@/.

LiveDemo

http://sqlfiddle.com/#!4/0a6e0/31

你可以試試這個。 它搜索一個. 后跟一個單詞字符,並用一個點替換它. ,然后是空格和匹配的角色。

select REGEXP_REPLACE(expCol, '\.(\w)','. \1') FROM ExpTable;

如果您只想要替換第一個此類事件,則可以指定它。

REGEXP_REPLACE(expCol, '\.(\w)','. \1',1,1) 

唯一需要注意的是,這也會匹配數字,字母和下划線,如果您不想考慮"_" ,請使用[[:alnum:]][a-zA-Z0-9]代替\\w

演示

你可以試試這個。

. 是正則表達式中的關鍵字,所以你需要把\\放在它前面

SELECT REGEXP_REPLACE(expCol, '\.(\w)', '. \1') from T

sqlfiddle: http ://sqlfiddle.com/#!4/94ffec/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM