PostgreSQL中查询仅含单个p*节点的ltree类型数据
PostgreSQL查询ltree字段中仅含一个p*节点的记录
可以通过正则匹配统计p开头节点的数量来实现需求,以下是查询语句:
SELECT * FROM structure WHERE regexp_count(text(path), '^p|\.p') = 1;
原理说明
- 将ltree类型的
path转换为文本格式(text(path)),便于使用正则进行节点匹配 - 正则表达式
^p|\.p精准匹配所有以p开头的节点:^p匹配位于路径开头的p节点(如p123.f456这类情况)\.p匹配位于路径中间或末尾的p节点(节点前有分隔符.)
regexp_count函数统计匹配到的p节点总数,当总数等于1时,筛选出符合要求的记录
验证示例
针对你提供的测试数据:
f55219.f55468.f55635.f44939.p10900.f45675.p10902 f55219.f55468.f43355.f55340.p12120 f55219.f55468.f55635.f44939.p11153.f46590.p11222 f55219.f55468.f43355.f48299.p11620
执行上述查询后,会返回第2、4行符合条件的记录。
内容的提问来源于stack exchange,提问作者JoAnywhere
相关产品推荐
相关产品推荐

