【Oracle】【6】去掉字符串中的空格/字符

本文详细介绍了Oracle数据库中处理字符串空格的各种方法,包括TRIM、RTRIM、LTRIM和REPLACE函数的使用,以及如何针对不同位置的空格和特定字符进行精确去除。通过实际SQL示例,读者可以学习到如何灵活运用这些函数来优化数据处理流程。
SELECT TRIM('   去除前后空格   ')  FROM DUAL;

SELECT REPLACE('   去除  任意位置的空格  ', ' ', '')  FROM DUAL;

扩展:

1,both, trailing, leading

(1)默认为删除空格

--结果:<test>
SELECT TRIM(BOTH FROM '  test  ') FROM DUAL;
--结果:<  test>
SELECT TRIM(TRAILING FROM '  test  ') FROM DUAL;
--结果:<test  >
SELECT TRIM(LEADING FROM '  test  ') FROM DUAL;

(2)“trim_character”参数只允许包含一个字符

--结果:<test>
SELECT TRIM(BOTH 'x' FROM 'xxxxTESTxxxx') FROM DUAL;
--结果:<test>
SELECT TRIM( 'x' FROM 'xxxxTESTxxxx') FROM DUAL;

 

2,trim,rtrim, ltrim

(1)默认为删除空格

--结果:<test>
SELECT TRIM( '  test  ') FROM DUAL;
--结果:<  test>
SELECT RTRIM( '  test  ') FROM DUAL;
--结果:<test  >
SELECT LRIM( '  test  ') FROM DUAL;

(2)“OR”不表示整个“OR”字符串进行匹配,而是发现任意的字符“O”或字符“R”均做删除操作

--是无效的
SELECT TRIM('OR__WORLD__OR','OR') FROM DUAL; 
--结果:<OROR__WORLD__>
SELECT RTRIM('OROR__WORLD__OROR','OR') FROM DUAL; 

--结果:<OROR__WORLD__X>
SELECT RTRIM('OROR__WORLD__XOROR','OR') FROM DUAL;

--结果:<OROR__WORLD__>
SELECT RTRIM('OROR__WORLD__R','OR') FROM DUAL; 
--结果:<__WORLD__OROR>
SELECT LTRIM('OROR__WORLD__OROR','OR') FROM DUAL; 

--结果:<X__WORLD__OROR>
SELECT LTRIM('ORORX__WORLD__OROR','OR') FROM DUAL;

--结果:<__WORLD__OROR>
SELECT LTRIM('O__WORLD__OROR','OR') FROM DUAL;  
--联合使用:结果:<__WORLD__>
SELECT RTRIM(LTRIM('OR__WORLD__OR','OR'), 'OR') FROM DUAL;

 

3,replace函数不仅可以去除字符串两端的空格,也可去除字符串内部的空格。也可去除和替换其他字符

--结果:<把晚上替换成晚上>
SELECT REPLACE('把早上替换成晚上', '早上', '晚上')  FROM DUAL;  

 

参考博客:

1,(转)oracle中如何对字符串进行去除空格的方法 - 王玉涛 - 博客园

http://www.cnblogs.com/wangyt223/archive/2012/11/29/2793959.html

转载于:https://www.cnblogs.com/huashengweilong/p/10678593.html

<think>我们正在处理Oracle SQL中字符串空格的问题。根据用户需求,我们需要字符串中的所有空格(包括中间和两端的空格)。 Oracle提供了多种函数来处理字符串中的空格: 1. TRIM函数:用于字符串两端的空格。 2. REPLACE函数:可以字符串中所有的空格(包括中间的空格)。 用户没有特别说明是除两端空格还是所有空格,但问题描述是“字符串中的空格”,通常理解为除所有空格。 因此,我们可以使用REPLACE函数将空格替换为空字符串。 示例: 假设有一个表`my_table`,其中有一个字段`my_column`,我们想要除这个字段中所有的空格。 查询语句如下: ```sql SELECT REPLACE(my_column, ' ') AS cleaned_column FROM my_table; ``` 注意:REPLACE函数在Oracle中的用法是`REPLACE(字符串, 要替换的子字符串, 替换成的字符串)`,但是当我们要替换成空字符串时,可以省略第三个参数(因为默认就是去掉,即替换为空)。但是注意,这里我们只用一个空格字符作为查找,实际上只能替换掉空格(ASCII 32)。如果字符串中还有其他空白字符(如制表符、换行等),可能需要使用其他方法。 如果要除所有空白字符(包括制表符、换行等),我们可以使用REGEXP_REPLACE函数,用正则表达式匹配所有空白字符。 例如: ```sql SELECT REGEXP_REPLACE(my_column, '\s', '') AS cleaned_column FROM my_table; ``` 但是用户问题中只提到了空格,所以我们可以根据实际情况选择。 另外,如果只需要除两端的空格,可以使用TRIM函数: ```sql SELECT TRIM(my_column) AS cleaned_column FROM my_table; ``` 根据用户需求,我们主要使用REPLACE函数除所有空格。 但是,请注意:在Oracle中,空格的表示是一个空格字符,而REPLACE函数一次只能替换一种字符。如果字符串中可能包含多种空白字符(比如制表符、换行符等),那么使用REPLACE(' ')就不能完全除。因此,如果要除所有空白,建议使用正则表达式方法。 总结: 1. 除所有空格(仅空格字符): ```sql SELECT REPLACE(my_column, ' ') AS cleaned_column FROM my_table; ``` 2. 除所有空白字符(包括空格、制表符、换行等): ```sql SELECT REGEXP_REPLACE(my_column, '\s', '') AS cleaned_column FROM my_table; ``` 用户可以根据需要选择。 另外,注意在Oracle中,如果字符串是CHAR类型,那么它是以空白填充的(固定长度)。如果要除填充的空格,使用TRIM函数更合适,因为REPLACE会去掉所有的空格,包括中间的空格(如果原本有空格的话也会被去掉)。所以,如果要除的是CHAR类型字段的填充空格,应该用TRIM。 但是,用户的问题没有说明字段类型,所以我们需要提供通用的方法。 根据问题,用户要求字符串中的空格,我们给出两种方法(仅空格和所有空白)并解释其区别。 最后,生成相关问题。</think>### Oracle SQL 字符串空格的完整指南 在 Oracle SQL 中字符串空格有多种方法,根据您的具体需求选择合适的方式: #### 1. **除所有空格(包括中间空格)** ```sql -- 使用 REPLACE 函数(简单高效) SELECT REPLACE(' Oracle SQL ', ' ', '') AS result FROM dual; -- 结果: 'OracleSQL' -- 使用 REGEXP_REPLACE(支持正则表达式) SELECT REGEXP_REPLACE(' Oracle SQL ', '\s', '') AS result FROM dual; -- 结果: 'OracleSQL' ``` #### 2. **除两端空格(保留中间空格)** ```sql -- 标准 TRIM 函数 SELECT TRIM(' Oracle SQL ') AS result FROM dual; -- 结果: 'Oracle SQL' -- 明确指定左右空格 SELECT LTRIM(RTRIM(' Oracle SQL ')) AS result FROM dual; -- 结果: 'Oracle SQL' ``` #### 3. **除特定位置空格** ```sql -- 仅除左侧空格 SELECT LTRIM(' Oracle SQL ') AS result FROM dual; -- 结果: 'Oracle SQL ' -- 仅除右侧空格 SELECT RTRIM(' Oracle SQL ') AS result FROM dual; -- 结果: ' Oracle SQL' ``` #### 4. **高级处理:除所有空白字符(含制表符/换行符)** ```sql SELECT REGEXP_REPLACE(' Orac'||CHR(9)||'le SQL'||CHR(10), '\s', '') AS result FROM dual; -- 结果: 'OracleSQL' ``` #### 实际应用示例 ```sql -- 更新表中所有记录的字段值 UPDATE employees SET full_name = TRIM(full_name); -- 查询时动态处理 SELECT employee_id, TRIM(first_name) || ' ' || TRIM(last_name) AS full_name FROM employees WHERE REGEXP_REPLACE(job_title, '\s', '') LIKE '%Manager%'; ``` > **关键区别**: > - `REPLACE`/`REGEXP_REPLACE`:移除所有空格(包括单词间) > - `TRIM`/`LTRIM`/`RTRIM`:仅移除首尾空格 > - 正则表达式`\s`匹配所有空白字符空格、制表符、换行符等)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值