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:拆分给定字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在CentOS 7/6.5/6.4 下安装PostgreSQL 9.3 与 phpPgAdmin