You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动