2014-06-16 67 views
0

我需要一个简单的替换函数,它将分号分隔的字符串替换为带引号的逗号分隔字符串。Oracle REGEXP_REPLACE替换;带引号的字符串的分隔字符串

'123; Asd; _P1;'替换为'123','Asd','_P1'

试过这个,但最后一个字符串错过了引号,并且字符串可以有其他字符。

SELECT REGEXP_REPLACE('123;234;345;123','([[:alnum:]]+);', '''\1'',') List FROM DUAL;

回答

1

我不认为你需要regexp_replace这里,一个简单的replace应该是足够的。它似乎只是想用字符串“','”替换一个分号,然后在字符串之前和之后添加一个单引号。

select q'{'}' || 
     replace('123;234;345;123', ';', q'{','}') || 
     q'{'}' 
    from dual 
+0

谢谢您的帮助。这工作。 –

+0

我无法使其在WHERE子句中工作。 'WHERE Col1 IN(q'{'}'|| replace('MK2.3; P002; 0001112',';',q'{','}')|| q'{'}'))'Can你请让我知道我错过了什么? –

+0

@AnitaKulkarni - 那是因为你问了一个错误的问题。您不能使用字符串变换将单个分隔字符串更改为'WHERE'子句中的一组字符串。您可以解析分隔字符串来填充集合并在查询中使用该集合https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:110612348061 –

0

SELECT REGEXP_REPLACE(REGEXP_REPLACE('123;234;345;123','([[:alnum:]]+);', '''\1'','), ',([[:alnum:]]+)', ',''\1''') FROM DUAL;

+0

如果这些字段包含除字母数字之外的字符? (例如'_P1') – tbone

+0

贾斯汀的答案适用于任何字符。 –

相关问题