Sql 如何在Oracle11gR2中删除一组数据中的前导空格和尾随空格?
我正在寻找一种方法,根据以下场景,使用SQL在Oracle 11gR2数据库中删除前导空格和尾随空格。不确定是否需要REGEXP\u替换 目前,我有以下可能的情况: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中,我所追求
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之间的空格,只去掉前导空格和尾随空格,对吗?谢谢。@扁桃体-是的,第二个版本保留了中间值空格。我用两个单词的值重新运行了这个示例,以表明它是正确的。