我正在尝试在Oracle中使用Replace函数,我找不到任何正则表达式来得到我想要的结果。
SELECT REPLACE('Cat,Dog',',','') FROM DUAL;
字符串预期结果:例如:'Cat,Dog'结果为'Cat','Dog'
'Cat,Dog'
'Cat','Dog'
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'
型
vhmi4jdf2#
您不需要正则表达式,只需将,替换为',',然后添加前导和尾随单引号:
,
','
SELECT '''' || REPLACE('Cat,Dog',',',''',''') || '''' AS list_string FROM DUAL;
字符串哪些输出:| LIST_STRING || ------------ || 'Cat','Dog' |
NULL
''
IN
但是,如果你试图在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
2条答案
按热度按时间3qpi33ja1#
字符串
测试结果:
型
测试结果:
型
否,在ORACLE正则表达式中使用不带捕获组的\0将不起作用
型
测试结果:
型
vhmi4jdf2#
您不需要正则表达式,只需将
,
替换为','
,然后添加前导和尾随单引号:字符串
哪些输出:
| LIST_STRING |
| ------------ |
| 'Cat','Dog' |
NULL
输入转换为''
。如果你使用它来为IN
表达式构建一个动态列表,那么''
和NULL
是一样的,所以不会发生错误的转换。但是,如果你试图在
IN
表达式中使用它,那么你不需要转换字符串,只需要使用子字符串匹配(包括周围的分隔符):型
其中,对于样本数据:
型
输出:
| 姓名| NAME |
| --| ------------ |
| 猫| Cat |
| 狗| Dog |
fiddle