oracle查询删除单词后的多余空格,字符串中点后没有空格

oracle query to remove extra spaces after word and no spaces after a dot in a string

我想要一个将处理两件事的 oracle 查询:

1) 任何单词后只有一个 space。删除字符串中任何单词后的任何额外 spaces。

2) 不想在字符串中的任何 "dot or comma or colon or semi-colon" 之后看到任何 space(如果有的话)。 ".,;:"

后零 space 秒

示例:

'My  name is Pramod.  I am writing a query,  Today is AUG 16TH: 2019;  X11.'

请求的输出:

'My name is Pramod.I am writing a query,Today is AUG 16TH:2019;X11.'

注:My后有两个space,I;:和[后有两个space =13=].

像这样的东西应该可以工作:

...
regexp_replace(input_string, '( |\.|,|:|;) +', '')
...

第二个参数(正则表达式)括号中的内容是一个 交替 - 它恰好匹配五个字符之一 space、句点、逗号、冒号或分号。 (当然,必须转义句点。)您可以在其中包含任何标点符号。括号中的东西也是一个 subexpression 可以被函数第三个参数中的 backreference 引用。

如果您不熟悉这些概念中的任何一个,请查找并阅读 Oracle regexp_replace() 的文档。

使用regexp_replace:

FSITJA@db01> select regexp_replace('My  name is Pramod. I    am writing   .   a query, Today is AUG 16TH:   2019; X11.  abc', '([,;:. ]){1} +', '')
  2      from dual;

REGEXP_REPLACE('MYNAMEISPRAMOD.IAMWRITING.AQUERY,TODAYISAUG16TH:2019;X
----------------------------------------------------------------------
My name is Pramod.I am writing .a query,Today is AUG 16TH:2019;X11.abc