2017-12-02 162 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中使用正則表達式。謝謝你的回答,但看起來有點複雜。 –