PostgreSQL 9.3:拆分给定的字符串

时间:2015-03-11 11:02:10

标签: postgresql postgresql-9.3

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

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

示例

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';

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

像这样:

预期输出

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

2 个答案:

答案 0 :(得分:1)

您可以使用以下方式获得所需的输出:

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

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

答案 1 :(得分:1)

为此,

split_part()通常最简单,最快:

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

如果字符串中的一个或两个日期的长度不同,则此功能更强大,甚至可以正常工作。演员需要一个有效的日期字符串。
相关: