PostgreSQL 9.3:拆分给定的字符串

PostgreSQL 9.3: Split given string

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

我有一个包含两列的 table:

例子:

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 用于分隔成两个日期,想要 存储到临时 table.

像这样:

预期输出

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

您可以使用以下方法获得您想要的输出:

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

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

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