Postgresql - 将列中的数据拆分为两列

时间:2017-12-02 18:53:11

标签: postgresql

我有一个小的Porstgre数据库,我有一个包含多列的表。 其中一列包含如下数据: test1 (80%) test2 (21%) test3 (40%)等......

我想做的是能够将该百分比移到另一列,以便数据看起来像:

TEST_COLUMN | PERCENTAGE_COLUMN

test1       | 80%

test2       | 21%

等...

知道我有超过10k的记录,如果有办法实现这一点,而不必手动移动任何东西,将会很有帮助。 提前谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用REGEXP

SELECT  col ,TRIM(REGEXP_REPLACE(col, '(\(\d+%\))$', '')) AS test_column
       ,(REGEXP_MATCHES(col, '(\d+%)\)$'))[1] AS percentage_column
FROM t;

<强> DBFiddle Demo

答案 1 :(得分:1)

你可以正则表达它或其他文本过程,例如:

t=# with a(v) as (values('test1 (80%)'),('test2 (21%)'),('test3 (40%)'))
, p as (select v,string_to_array(v,'(') ar from a)
select v, ar[1],translate(ar[2],')','') from p;
      v      |   ar   | translate
-------------+--------+-----------
 test1 (80%) | test1  | 80%
 test2 (21%) | test2  | 21%
 test3 (40%) | test3  | 40%
(3 rows)