PostgreSQL中含方括号数据的LIKE运算符使用方法咨询
在PostgreSQL中用LIKE处理含方括号的数据
嘿,我来帮你搞定这个问题~ 你提到的MCurrentStates字段里的方括号[],在PostgreSQL的LIKE运算符里属于特殊通配符(用来定义字符范围,比如[a-z]匹配小写字母),直接写的话会被解析成规则而不是字面字符,所以得做转义处理才行。下面给你几种实用的方法:
方法1:使用默认转义字符(反斜杠\)
PostgreSQL默认用反斜杠作为LIKE的转义字符,要匹配字面的[或],只需要在前面加\就行。比如要查询所有包含[operative]的记录:
SELECT Bold_Id, MCurrentStates FROM PlanMission WHERE MCurrentStates LIKE '%\[operative\]%';
⚠️ 注意:如果是在psql客户端执行,因为反斜杠本身也是字符串转义符,可能需要双重转义(写两个\\),或者用美元引号字符串来避免这个麻烦:
-- 美元引号写法,无需双重转义 SELECT Bold_Id, MCurrentStates FROM PlanMission WHERE MCurrentStates LIKE $1$%\[operative\]$1$;
方法2:自定义转义字符(更直观)
如果你觉得反斜杠容易搞混,可以用ESCAPE子句指定一个自定义的转义字符(比如!或^),这样可读性更强。比如:
SELECT Bold_Id, MCurrentStates FROM PlanMission WHERE MCurrentStates LIKE '%![operative]!%' ESCAPE '!';
这里ESCAPE '!'告诉PostgreSQL:!后面的字符要当作字面量处理,所以![就是匹配[,!]就是匹配]。
举几个实际场景的例子
- 查找以
[original开头的记录:
SELECT Bold_Id, MCurrentStates FROM PlanMission WHERE MCurrentStates LIKE '\[original%';
- 查找包含
[closed]的记录:
SELECT Bold_Id, MCurrentStates FROM PlanMission WHERE MCurrentStates LIKE '%\[closed\]%' ESCAPE '\'; -- 显式指定转义符也可以
补充:和MS SQL Server的区别
你之前用的是SQL Server 2012,那边处理方括号是用[[]来匹配[,但PostgreSQL不支持这种语法,所以别搞混啦,用上面的转义方法就对了。
可以先跑个小测试验证效果:
-- 应该返回true SELECT '[operative][inproc]' LIKE '%\[operative\]%'; -- 会返回false,因为这里的[operative]被当成了字符范围规则 SELECT '[operative][inproc]' LIKE '%[operative]%';
内容的提问来源于stack exchange,提问作者Roland Bengtsson




