oracle 在sql中用regex将一个字符串替换为多个字符串

n7taea2i  于 12个月前  发布在  Oracle
关注(0)|答案(2)|浏览(87)

我正在尝试在Oracle中使用Replace函数,我找不到任何正则表达式来得到我想要的结果。

SELECT REPLACE('Cat,Dog',',','') FROM DUAL;

字符串
预期结果:例如:'Cat,Dog'结果为'Cat','Dog'

3qpi33ja

3qpi33ja1#

SELECT regexp_replace('Cat,Dog','([^,]+)', '''\1''') FROM DUAL;

字符串
测试结果:

'Cat','Dog'

SELECT regexp_replace('Cat,Dog,Lion','([^,]+)', '''\1''') as res
FROM DUAL;


测试结果:

'Cat','Dog','Lion'


否,在ORACLE正则表达式中使用不带捕获组的\0将不起作用

SELECT regexp_replace('Cat,Dog,Lion','[^,]+', '''\0''') as res
FROM DUAL;


测试结果:

'\0','\0','\0'

vhmi4jdf

vhmi4jdf2#

您不需要正则表达式,只需将,替换为',',然后添加前导和尾随单引号:

SELECT '''' || REPLACE('Cat,Dog',',',''',''') || '''' AS list_string
FROM   DUAL;

字符串
哪些输出:
| LIST_STRING |
| ------------ |
| 'Cat','Dog' |

  • 注意:这会将NULL输入转换为''。如果你使用它来为IN表达式构建一个动态列表,那么''NULL是一样的,所以不会发生错误的转换。

但是,如果你试图在IN表达式中使用它,那么你不需要转换字符串,只需要使用子字符串匹配(包括周围的分隔符):

SELECT *
FROM   animals
WHERE  ',' || 'Cat,Dog' || ',' LIKE '%,' || name || ',%';


其中,对于样本数据:

CREATE TABLE Animals (id, name) AS
SELECT 1, 'Cat' FROM DUAL UNION ALL
SELECT 2, 'Dog' FROM DUAL UNION ALL
SELECT 3, 'Rat' FROM DUAL;


输出:
| 姓名| NAME |
| --| ------------ |
| 猫| Cat |
| 狗| Dog |
fiddle

相关问题