甲骨文 sql regexp_replace

oracle sql regexp_replace

我有一个 table 具有这样的值。

ExpTable

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

而我想要的是,当句点后面的字符是字母或数字时,输出将在点后添加一个 space,如下所示:

预期输出

+--------+   
|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.@/.' 在内的所有内容在句点后都有一个 space。我不知道在 WHERE 子句中放什么。

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

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

输出

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

现场演示

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

你可以试试这个。

. 是正则表达式中的关键字,因此您需要在其前面加上 \

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

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

你可以试试这个。它搜索 . 后跟一个单词字符,并将其替换为点 .,然后是 space 和匹配的字符。

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

如果您只想替换第一个这样的事件,您可以指定它。

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

唯一需要注意的是,这也会匹配数字、字母和下划线,如果您不想考虑 "_" ,请使用 [[:alnum:]][a-zA-Z0-9]\w

Demo