在Oracle中删除单引号

时间:2018-07-11 08:07:29

标签: sql oracle

我有一个像(''acc','xyz'')这样的字符串,我需要输出为('acc','xyz')

要删除多余引号的查询或任何正则表达式将是什么?

2 个答案:

答案 0 :(得分:2)

尝试REPLACE function

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'[']')看上去很愚蠢,但是-使用其中的任何一种(或发明 )。