[英]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
你可以試試這個。 它搜索一個.
后跟一個單詞字符,並用一個點替換它.
,然后是空格和匹配的角色。
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.