本文首次创作于 2025-04-08,最后更新于 2025-05-23,距离上次更新已经过了 13 天,文章内容可能已经过时。

Oracle 中的 TRIM、LTRIM 和 RTRIM 函数详解详解

TRIM 函数是 Oracle 数据库中用于去除字符串首尾指定字符的函数,它可以灵活地去除字符串开头或结尾(或两端)的特定字符。

LTRIM 函数是专门用于去除字符串开头的空格或指定字符集

RTRIM 函数是专门用于去除字符串结尾的空格或指定字符集

基本语法

 TRIM([LEADING|TRAILING|BOTH] [trim_character] FROM] source_string)
 ​
 LTRIM(source_string [, trim_character])
 ​
 RTRIM(source_string [, trim_character])

参数说明

参数

说明

LEADING

只去除开头的字符

TRAILING

只去除结尾的字符

BOTH

去除两端的字符(默认选项)

trim_character

要去除的字符(默认为空格)

source_string

原始字符串

使用示例

1. 基本用法(去除两端空格)

 SELECT TRIM('   Oracle Database   ') FROM dual;
 -- 结果: 'Oracle Database'

2. 去除特定字符

SELECT TRIM('0' FROM '0001234500') FROM dual;
-- 结果: '12345' (去除两端的0)

3. 指定去除位置

-- 只去除开头字符
SELECT TRIM(LEADING 'x' FROM 'xxxHello Worldxxx') FROM dual;
-- 结果: 'Hello Worldxxx'

-- 只去除结尾字符
SELECT TRIM(TRAILING 'x' FROM 'xxxHello Worldxxx') FROM dual;
-- 结果: 'xxxHello World'

4. 结合表列使用

SELECT TRIM(both ' ' FROM customer_name) AS clean_name
FROM customers;

5. 去除多个不同字符

-- 需要嵌套使用
SELECT TRIM('*' FROM TRIM('#' FROM '#*Test*#')) FROM dual;
-- 结果: 'Test'

特殊注意事项

  1. 默认行为:如果不指定任何修饰词,TRIM 默认是 BOTH 且去除空格

  2. NULL 处理:如果 source_string 为 NULL,结果返回 NULL

  3. 多字符处理:TRIM 只能去除单个字符,不能直接去除多个不同字符

  4. 中间字符:不会去除字符串中间的字符,只处理开头和结尾

相关函数

LTRIM 和 RTRIM(功能子集)

SELECT LTRIM('   left') FROM dual;   -- 结果: 'left'
SELECT RTRIM('right   ') FROM dual;  -- 结果: 'right'

正则表达式替换(更复杂场景)

SELECT REGEXP_REPLACE('xxyyTestyyxx', '^[xy]+|[xy]+$', '') 
FROM dual;
-- 结果: 'Test'

实际应用场景

  1. 数据清洗

    UPDATE products 
    SET product_code = TRIM(product_code);
  2. 用户输入处理

    SELECT TRIM(both FROM user_input) AS clean_input
    FROM user_data;
  3. 处理固定格式数据

    SELECT TRIM('"' FROM json_value) AS unquoted_value
    FROM json_data;
  4. 去除特定符号

    SELECT TRIM(TRAILING ',' FROM csv_line) 
    FROM imported_data;
  5. 与其它字符串函数组合

    SELECT TRIM(both FROM SUBSTR(raw_data, 5, 10))
    FROM data_table;

TRIM 函数在数据清洗和预处理中非常实用,特别是处理来自外部系统的数据时,经常需要去除多余的空格或特定分隔符。

三者的对比

特性

TRIM

LTRIM

RTRIM

默认去除内容

空格

空格

空格

处理位置

可指定开头/结尾/两端

仅开头

仅结尾

可指定字符

单个字符

字符集

字符集

灵活性

最高

中等

中等

去除多个不同字符

需要嵌套使用

直接支持

直接支持

使用建议

  1. 当只需要去除空格时:三者都可以,根据位置需求选择

    TRIM('  text  ')  -- 两端
    LTRIM('  text')   -- 仅左
    RTRIM('text  ')   -- 仅右
  2. 当需要去除特定字符时

    • 如果是单个字符且需要精确控制位置:用 TRIM

      TRIM(LEADING '0' FROM '000123')
    • 如果是多个字符:用 LTRIM/RTRIM

      LTRIM('xxyyz123', 'xyz')
  3. 复杂场景组合使用

     SELECT TRIM(BOTH FROM LTRIM(RTRIM(raw_data, ';,'), '0x'))
     FROM data_table;