我有一个用例,我需要用多个分隔符分割字符串.

client_id
blah_blah
bleh-bleh
select client_id ,split(client_id,'-')[0] col1` ,split(client_id,'-')[1] col2 from mytbl

返回

Client_id col1 col2
bleh-bleh bleh bleh

我一直在try 各种排列来获得两个定界符,但没有成功.

select client_id ,split(client_id,'-'||'_')[0] col1` ,split(client_id,'-'||'_')[1] col2 from mytbl

这是错误的,但我想返回的是...

client_id col1 col2
blah-blah blah blah
bleh_bleh bleh bleh

推荐答案

您可以使用regexp_split_to_array与一个短划线或下划线的双正则表达式:

select 
    client_id,
    (regexp_split_to_array(client_id, '[-_]'))[1] col1, 
    (regexp_split_to_array(client_id, '[-_]'))[2] col2 
    from mytbl;

这是一个小提琴POC:https://www.db-fiddle.com/f/4jyoMCicNSZpjMt4jFYoz5/13029

Postgresql相关问答推荐

为什么在使用PostGIS时,英国郡的几何图形会出现在几内亚湾?

处理Ruust-DIESEL中的Jsonb PostgreSQL列

空表上的 Postgres 意外行为

使用 OpenCypher 和 Apache AGE 在两个顶点之间创建双向关系

在 jOOQ 中使用 $$ 引用字符串

为什么我使用 VBA 只能从 postgres 获得 10 行?

如何包装 record_out() 函数?

PostgreSQL - 继承表的常见自动增量

全文搜索(Postgres)与Elastic search

DbProviderFactory 与 Npgsql?

如果 PostgreSQL 数据库中存在,则删除表

我如何知道我的 PostgreSQL 服务器是否使用C语言环境?

如何只允许一个表的一行?

在 Spring Boot 应用程序中禁用表重新创建

在同一台机器上创建多个 Postgres 实例

查询 JSON 列中的数组元素

SQL:子查询的列太多

如何在不丢失openproject数据的情况下将postgresql数据库从10升级到12

Heroku 上的 Postgres 并将单个表转储到转储文件

如何在 PostgreSQL 中获取数组的最后一个元素?