我有一些包含行的数据,其中的数据如下

'abcd/12313:100', 
'abcd/12123:1001/XYS/ABCDXY',
'abcd/12123:1001/XYS/ABCDXY/TEYE'

我正在try Select 只有一个正斜杠的行,使用

select distinct id from public.table_name where id ~* '[/{0,1}]';

select distinct id from public.table_name where id ~* '/';

但是当我只需要得到第一行时,我就会不断地得到这两行(即:‘abcd/12313:100’)

我正在运行PostgreSQL 14.9.

任何帮助都将不胜感激.

谢谢

推荐答案

您不需要正则表达式来只匹配在id列中恰好出现一个正斜杠的那些行:

SELECT DISTINCT id
FROM public.table_name
WHERE LENGTH(id) - LENGTH(REPLACE(id, '/', '')) = 1;

LENGTH(id)给出了id列中字符串的原始长度,LENGTH(REPLACE(id,‘/’,‘’))给出了go 掉所有正斜杠后字符串的长度.从前者中减go 后者,得到字符串中的正斜杠的个数

Postgresql相关问答推荐

计算两个子查询之间的差异

为什么我的应用程序接收的是空值而不是布尔值?

复合索引列的顺序导致不同的计划

使用jOOQ在postgres上取消嵌套enum_range

Postgres 生成的列不是不可变的

AGE Graph 实际上存储为 postgreSQL 表,对吧?如何检索该表(不是图表)?

Postgres >= 和 <= 具有特殊字符的行为

使用包含重复元素的数组 Select 重复值

如何 Select 任意行的相邻行(在 sql 或 postgresql 中)?

带有 -C 选项的 pg_restore 不会创建数据库

获取带有时区偏移的日期

Mac psql/readline - 未加载库

PostgreSQL如何连接间隔值'2天'

在 PostgreSQL 中表示Sparse稀疏数据

我不明白 postgresql 的 nextval() 是如何工作的,有人可以解释一下吗?

返回 array_agg() 中的第一个元素

使用枚举与布尔值?

PostgreSQL:如何在用户级别设置 search_path?

如何将 PostgreSQL 查询输出导出到 csv 文件

如何查询前 10 行,下一次从表中查询其他 10 行