Вопрос:
У меня есть небольшая база данных 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)