我有一个像(''acc','xyz'')
这样的字符串,我需要输出为('acc','xyz')
。
要删除多余引号的查询或任何正则表达式将是什么?
答案 0 :(得分:2)
replace(q'[(''acc','xyz'')]', q'['']',q'[']')
演示:http://www.sqlfiddle.com/#!4/abb5d3/1
SELECT replace(q'[(''acc','xyz'')]', q'['']',q'[']')
FROM dual;
| REPLACE(Q'[(''ACC','XYZ'')]',Q'['']',Q'[']') |
|----------------------------------------------|
| ('acc','xyz') |
答案 1 :(得分:1)
如果该 string 总是像您描述的那样,则将两个连续的单引号(CHR(39))替换为一个,例如
SQL> with test (col) as
2 (select q'[(''acc','xyz'')]' from dual)
3 select col,
4 replace(col, chr(39)||chr(39), chr(39)) result
5 from test;
COL RESULT
--------------- ---------------
(''acc','xyz'') ('acc','xyz')
SQL>
为什么要使用CHR(39)?因为这样:replace(col, '''''', '''')
很难读懂,而且这样:replace(col, q'['']', q'[']')
看上去很愚蠢,但是-使用其中的任何一种(或发明 )。