PostgreSQL如何查询comment字段中括号内为非数字ID的问题记录?
PostgreSQL 筛选异常@提及评论的查询方案
我们可以直接利用PostgreSQL内置的正则匹配能力实现需求,核心是匹配@[用户名](内容)结构中括号内的内容不是纯数字的记录。
推荐查询语句
-- 替换下方的「your_table」为你实际的数据表名 SELECT id, comment FROM your_table WHERE comment ~ '@\[[^\]]*\]\((?!\d+\))';
正则逻辑说明
@\[:匹配@提及的固定开头@[[^\]]*:匹配方括号内的所有用户名内容(直到遇到右方括号为止)\]\(:匹配方括号和括号之间的固定分隔符]((?!\d+\)):负向预查规则,判定括号内的内容不是「1个及以上数字+右括号」的标准ID格式,只要存在任意一个不符合规则的@提及,该条记录就会被筛选出来。
低版本兼容写法
如果你的PostgreSQL版本不支持正则负向预查,可以改用如下写法:
SELECT id, comment FROM your_table WHERE comment ~ '@\[[^\]]*\]\([^0-9)]' OR comment ~ '@\[[^\]]*\]\([0-9]+[^0-9)]';
用你提供的示例数据测试时,上述语句会正确返回id=1的异常评论,不会返回id=2的正常评论。
内容的提问来源于stack exchange,提问作者TheUnreal
相关产品推荐
相关产品推荐

