如何删除Oracle11gR2中一组数据中的前导和尾随空格?

时间:2014-08-14 12:52:39

标签: sql regex oracle11g

我正在寻找一种基于Oracle 11gR2数据库中使用SQL的以下场景来删除前导空格和尾随空格的方法。不确定我是否需要REGEXP_REPLACE。

目前我有以下可能的情况:

v_entries := '"QAZ   "," QWERTY     ","BOB ","   MARY        ","HARRY","  TOM JONES  "'

你可以看到我在双引号中的某些数据中有前导空格和尾随空格,即" QWERTY "但不是全部像"HARRY",这很好。

我所追求的并且不确定如何在Oracle 11gR2中做到这一结果,即:

v_entries := '"QAZ","QWERTY","BOB","MARY","HARRY",,"TOM JONES"'

其中所有前导/尾随空格已被删除,它们存在于双引号分组中,但仅来自每个分组的开头和结尾。

不应删除实际值中包含空格的组,就像我的"TOM JONES"一样 - 希望在此处保留给定的名称空间姓氏值。

3 个答案:

答案 0 :(得分:2)

假设您不想将字符串拆分为其组件,可以使用正则表达式删除空格。如果你想摆脱所有空格 - 例如你没有任何双字值 - 那么你可以使用:

v_entries := regexp_replace(v_entries, '[[:space:]]', null);

但是如果你想要保留一个值中间的空格,你只能删除双引号字符的任何一面:

v_entries := '"QAZ   "," QWERTY     ","BOB ","   MARY            ","HARRY"';

例如:

declare
  v_entries varchar2(80);
begin
  v_entries := '"QAZ   "," QWERTY     ","BOB ","   MARY           ","TOM JONES"';
  v_entries := regexp_replace(v_entries, '[[:space:]]*"[[:space:]]*', '"');
  dbms_output.put_line(v_entries);
end;
/

anonymous block completed
"QAZ","QWERTY","BOB","MARY","TOM JONES"

答案 1 :(得分:0)

您应该使用trim()函数删除前导和尾随空格。 Here's the documentation关于如何使用trim()

答案 2 :(得分:0)

组合LRTIM和RTRIM就可以了解

SELECT RTRIM(LTRIM ('   QWERTY   ') ) FROM DUAL;

在PLSQL中

DECLARE
   check varchar2(30) := '   QWERTY   ';
BEGIN
   dbms_output.put_line(RTRIM(check));
   dbms_output.put_line(LTRIM(check));
   dbms_output.put_line(RTRIM(LTRIM (check)));
END;
/