2017-12-02 417 views
1

我有一个小的Porstgre数据库,其中有一个包含多列的表。 这些列的一个包含这样的数据: test1 (80%) test2 (21%) test3 (40%)等等Postgresql - 将列中的数据拆分为两列

我想什么做的,是能够给个移动到另一列这样的数据看起来就像是:

TEST_COLUMN | PERCENTAGE_COLUMN 

test1  | 80% 

test2  | 21% 

等等

知道我有超过10,000记录,如果有一种方法来实现这一目标,而不必手动移动任何东西,这将是有益的。 预先感谢

回答

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) 
+1

我没有知道我们可以做这样的事情,并在sql中使用正则表达式。谢谢你的回答,但看起来有点复杂。 –