如何在LIKE运算符中使用LTRIM与RTRIM函数
正确结合LTRIM/RTRIM与LIKE运算符的SQL写法
嘿,我看到你在SQL里把LTRIM/RTRIM和LIKE结合的时候踩了个小坑——你把函数放在单引号里了,数据库会把LTRIM(RTRIM('test '))当成普通的文本字符串来匹配,根本不会执行修剪空格的逻辑!下面给你两种常见场景的正确写法:
场景1:修剪字段值后匹配目标字符串
如果你想筛选出DEFINITION_字段去掉前后空格后包含'test'的记录,可以直接对字段应用修剪函数,再搭配LIKE:
-- 用LTRIM+RTRIM的写法 SELECT * FROM LG_211_CLCARD WHERE LTRIM(RTRIM(DEFINITION_)) LIKE '%test%'; -- 更简洁的TRIM写法(大部分数据库支持,同时去前后空格) SELECT * FROM LG_211_CLCARD WHERE TRIM(DEFINITION_) LIKE '%test%';
场景2:修剪搜索值后匹配字段
如果你想让DEFINITION_字段包含修剪后的搜索值(也就是把'test '变成'test'再匹配),需要先修剪搜索字符串,再通过字符串拼接和LIKE结合:
通用写法(用CONCAT函数,适配多数数据库)
SELECT * FROM LG_211_CLCARD WHERE DEFINITION_ LIKE CONCAT('%', LTRIM(RTRIM('test ')), '%'); -- 同样可以替换成TRIM简化 SELECT * FROM LG_211_CLCARD WHERE DEFINITION_ LIKE CONCAT('%', TRIM('test '), '%');
不同数据库的专属写法
- SQL Server 可以用
+做字符串拼接:SELECT * FROM LG_211_CLCARD WHERE DEFINITION_ LIKE '%' + TRIM('test ') + '%'; - Oracle 可以用
||做字符串拼接:SELECT * FROM LG_211_CLCARD WHERE DEFINITION_ LIKE '%' || TRIM('test ') || '%';
小提示:尽量优先用TRIM()代替LTRIM(RTRIM()),代码更简洁,逻辑也更清晰~
内容的提问来源于stack exchange,提问作者Cll
相关产品推荐
相关产品推荐

