我的列包含全名,一些最终用户像空格一样输入错误的条目,我会从记录中删除空格但我只会从前三个字符中删除空格。
这是一个例子
Full_NAME
-------------------
J ON,JACK EDWARD
Al mond,abbe abbas
我希望结果是:
Full_NAME
------------------
JON,JACK EDWARD
ALmond,abbe abbas
答案 0 :(得分:0)
替换字符串中第一个空格的简单正则表达式将与您发布的数据一起使用:
SQL> select full_name,
2 regexp_replace(full_name, '\s+', null, 1, 1) as cleaned_name
3 from t67
4 /
FULL_NAME CLEANED_NAME
------------------ ------------------
J ON,JACK EDWARD JON,JACK EDWARD
Al mond,abbe abbas Almond,abbe abbas
SQL>
但是,当前导元素在多个地方包含空格或根本没有空格时,结果就不那么令人满意了:
SQL> select full_name,
2 regexp_replace(full_name, '\s+', null, 1, 1) as cleaned_name
3 from t67
4 /
FULL_NAME CLEANED_NAME
------------------ ------------------
J O N,JACK EDWARD JO N,JACK EDWARD
J ON,JACK EDWARD JON,JACK EDWARD
Almond,abbe abbas Almond,abbeabbas
SQL>
我想这是相关的to your other question,你需要保留最后的空格,因为它是一个分隔符。当原始数据使用常见字符作为分隔符时,清理数据非常棘手,更糟糕的是在同一个字符串中使用多个分隔符。
我的建议是使用我之前答案的输出将字符串拆分为三个元素,然后对每个元素应用后续清理。这样你就可以忘记将清洁过程混为一谈的划界人物。
替代方案是一些非常粗糙的正则表达式:)
答案 1 :(得分:0)
我建议在这里使用NULLIF函数:
SELECT NULLIF(SUBSTR(FULLNAME, 1, 1), ' ') ||
NULLIF(SUBSTR(FULLNAME, 2, 1), ' ') ||
NULLIF(SUBSTR(FULLNAME, 3, 1), ' ') ||
SUBSTR(FULLNAME, 4) AS CLEANED_NAME
FROM T67;
祝你好运。