PostgreSQL 9.3:拆分给定字符串

Posted

技术标签:

【中文标题】PostgreSQL 9.3:拆分给定字符串【英文标题】:PostgreSQL 9.3: Split given string 【发布时间】:2015-03-11 11:02:09 【问题描述】:

我想将给定的逗号分隔字符串拆分成列。

我有一个包含两列的表格:

示例

create table t3
(
    cola varchar,
    colb varchar
);

插入

insert into t3 values('AD1','2000-01-01to2000-02-01'),
                     ('AD2','2000-03-01to2000-04-01'),
                     ('AD3','2000-05-01to2000-06-01');

现在我想从上面给定的记录中准备两个逗号分隔的字符串,如下所示:

str1 varchar = 'AD1,AD2,AD3';

str2 varchar = '2000-01-01to2000-02-01,2000-03-01to2000-04-01,2000-05-01to2000-06-01';

现在我想存储逗号分隔的字符串,在第二个字符串中有 to 用于分隔成两个日期,想要 存储到临时表中。

像这样:

预期输出

c1       c2              c3
--------------------------------- 
AD1  2000-01-01       2000-02-01
AD2  2000-03-01       2000-04-01
AD3  2000-05-01       2000-06-01

【问题讨论】:

【参考方案1】:

你可以得到你想要的输出:

select cola as col1,
       cast(left(colb, 10) as date) as col2,
       cast(right(colb, 10) as date) as col2
from t3;

我不知道您为什么要创建中间逗号分隔的字符串,而逻辑不需要这些字符串。

【讨论】:

哇!这真的很棒。是的,你是对的,我不需要创建中间逗号分隔的字符串。这是我的错误逻辑。【参考方案2】:

split_part() 通常是最简单和最快的:

SELECT cola AS c1
     , split_part(colb, 'to', 1)::date AS c2
     , split_part(colb, 'to', 2)::date AS c3
FROM   t3;

如果字符串中的一个或两个日期的长度不同,这会更加健壮,甚至可以工作。无论哪种方式,演员都需要一个有效的日期字符串。 相关:

Split comma separated column data into additional columns

【讨论】:

以上是关于PostgreSQL 9.3:拆分给定字符串的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 8.4 和 9.3

如何在CentOS 7/6.5/6.4 下安装PostgreSQL 9.3 与 phpPgAdmin

PostgreSQL 9.3 慢查询

将 Excel 数据导入 PostgreSQL 9.3

Ubuntu 16.04 安装 postgresql 9.3

如何屏蔽 json 字段中的选定值 - Postgresql 9.3 和 PDI