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
我想将给定的逗号分隔字符串拆分成列。
我有一个包含两列的 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