Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Oracle11gR2中删除一组数据中的前导空格和尾随空格?_Sql_Regex_Oracle11g - Fatal编程技术网

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

Sql 如何在Oracle11gR2中删除一组数据中的前导空格和尾随空格?,sql,regex,oracle11g,Sql,Regex,Oracle11g,我正在寻找一种方法,根据以下场景,使用SQL在Oracle 11gR2数据库中删除前导空格和尾随空格。不确定是否需要REGEXP\u替换 目前,我有以下可能的情况: v_entries := '"QAZ "," QWERTY ","BOB "," MARY ","HARRY"," TOM JONES "' 您可以看到,我在双引号中的一些数据中既有前导空格,也有尾随空格,即“QWERTY”,但不完全像“HARRY”,这很好 在Oracle 11gR2中,我所追求

我正在寻找一种方法,根据以下场景,使用SQL在Oracle 11gR2数据库中删除前导空格和尾随空格。不确定是否需要REGEXP\u替换

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

v_entries := '"QAZ   "," QWERTY     ","BOB ","   MARY        ","HARRY","  TOM JONES  "'
您可以看到,我在双引号中的一些数据中既有前导空格,也有尾随空格,即
“QWERTY”
,但不完全像
“HARRY”
,这很好

在Oracle 11gR2中,我所追求并不确定如何处理的是这个结果,即:

v_entries := '"QAZ","QWERTY","BOB","MARY","HARRY",,"TOM JONES"'
删除了所有前导/尾随空格,它们存在于双引号分组中,但仅从每个分组的开头和结尾开始


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

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

将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;
/

假设不希望将字符串拆分为其组件,可以使用正则表达式删除空格。如果您想去掉所有空格(例如,您没有任何两个单词值),则可以使用:

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"

嘿,Alex,我刚刚更新了我的初始线程,表明我想在一个值内保留空格,比如“TOM JONES”。我假设你的解决方案会保留TOM和JONES之间的空格,只去掉前导空格和尾随空格,对吗?谢谢。@扁桃体-是的,第二个版本保留了中间值空格。我用两个单词的值重新运行了这个示例,以表明它是正确的。