Postgresql – разделение данных из столбца на два столбца

Вопрос: У меня есть небольшая база данных Porstgre, где у меня есть таблица с несколькими столбцами. Одна из этих столбцов содержит следующие данные: test1 (80%) test2 (21%) test3 (40%) т.д.... То, что я хотел бы сделать, - это переместить этот процент в другой столбец, чтобы данные выглядели так: TEST_COLUMN | PERCENTAGE_COLUMN test1 | 80% test2

Вопрос:

У меня есть небольшая база данных Porstgre, где у меня есть таблица с несколькими столбцами. Одна из этих столбцов содержит следующие данные: test1 (80%) test2 (21%) test3 (40%) т.д….

То, что я хотел бы сделать, – это переместить этот процент в другой столбец, чтобы данные выглядели так:

TEST_COLUMN | PERCENTAGE_COLUMN test1 | 80% test2 | 21%

так далее…

Зная, что у меня более 10 тыс. Записей, было бы полезно, если бы был способ достичь этого, не двигая ничего вручную. Заранее спасибо

Лучший ответ:

Вы можете использовать REGEXP:

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

Демоверсия DBFiddle

Ответ №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)

Оцените статью
Добавить комментарий