MySQL的TRIM()函数是字符串处理体系中非常基础且实用的函数,核心作用是清理字符串首尾的冗余字符,在数据处理、用户输入校验等场景中应用十分广泛。默认情况下它会去除字符串前后的空格,同时也支持自定义需要去除的字符,满足不同的处理需求。

TRIM()函数的基本语法
TRIM()函数的基础语法结构如下,其中包含两个可选的参数,默认情况下不需要额外指定参数即可实现去除首尾空格的效果:
-- 基础语法
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
-- 简化语法(默认去除首尾空格)
TRIM(str)
语法中各部分的含义如下:
- BOTH:表示去除字符串首尾两端的指定字符,这也是默认模式,如果不指定去除方向,默认使用BOTH。
- LEADING:表示只去除字符串左侧(开头)的指定字符。
- TRAILING:表示只去除字符串右侧(结尾)的指定字符。
- remstr:表示需要去除的指定字符,如果不设置该参数,默认去除空格。
- str:表示需要处理的原始字符串,可以是字段名、字符串常量或者字符串表达式。
默认去除空格的用法
当不指定去除方向和去除字符时,TRIM()函数会直接去除字符串前后的所有空格,这是最常用的使用场景,比如清理用户输入的多余空格。
-- 去除字符串前后的空格
SELECT TRIM(' hello mysql ') AS result;
-- 对表中字段使用TRIM函数,清理用户名称的前后空格
SELECT user_id, TRIM(user_name) AS clean_user_name FROM user_info;
第一个查询的执行结果会返回hello mysql,前后多余的空格都被移除了。第二个查询会对user_info表中user_name字段的每个值去除前后空格,得到更规范的名称数据。
去除指定字符的用法
如果需要去除的不是空格,而是其他特定字符,可以在语法中指定remstr参数,同时可以配合BOTH、LEADING、TRAILING指定去除方向。
去除字符串两端的指定字符
使用BOTH模式(默认模式也可以省略BOTH关键字)可以去除字符串首尾的指定字符,比如去除字符串前后的#号:
-- 去除字符串前后的#号
SELECT TRIM(BOTH '#' FROM '###mysql_trim_test###') AS result;
-- 省略BOTH关键字,效果一致
SELECT TRIM('#' FROM '###mysql_trim_test###') AS result;
两个查询的结果都会返回mysql_trim_test,字符串前后的#号都被成功移除。
只去除左侧或右侧的指定字符
如果只需要去除字符串左侧或者右侧的字符,可以分别使用LEADING和TRAILING关键字:
-- 只去除左侧的0 SELECT TRIM(LEADING '0' FROM '00012345000') AS result_leading; -- 只去除右侧的0 SELECT TRIM(TRAILING '0' FROM '00012345000') AS result_trailing;
第一个查询的结果是12345000,只去除了左侧的三个0;第二个查询的结果是00012345,只去除了右侧的三个0。
使用注意事项
在使用TRIM()函数时,有几个需要注意的点,避免出现不符合预期的处理结果:
- TRIM()函数只能去除字符串首尾的字符,无法去除字符串中间的字符,如果需要去除中间的指定字符,需要使用REPLACE()函数。
- 如果remstr参数是多个字符组成的字符串,TRIM()函数会逐个匹配这些字符,只要首尾出现remstr中的任意字符都会被去除,直到遇到不在remstr中的字符为止。
- 如果原始字符串为NULL,TRIM()函数的返回结果也会是NULL,使用时需要注意处理空值情况。
下面是一个验证remstr多字符匹配的示例:
-- remstr为'xy',会去除首尾所有的x和y,直到遇到其他字符 SELECT TRIM(BOTH 'xy' FROM 'xyxabcxyxy') AS result;
该查询的结果是abc,字符串开头的x、y、x都被去除,结尾的x、y、x也都被去除,只保留了中间的abc部分。