2016-11-07 3 views
2

У меня есть поле (различающегося типа), называемое «directlink_href» в таблице, которое содержит массивы, которые имеют значения, которые начинаются с символа «#».Удалить # символов из массивов в таблице PostgreSQL?

Как я могу удалить символ '#' из любых записей в этих массивах в этом поле?

Например ...

{#osgb4000000030451486,#osgb4000000030451491} 

в

{osgb4000000030451486,osgb4000000030451491} 

ответ

3

Чистое решение является unnest заменить, а затем повторно агрегировать значения:

select id, 
     (select array_agg(substr(x.val,2) order by x.idx) from unnest(t1.directedlink_href) with ordinality as x(val,idx)) as data 
from the_table t1; 

Если вы действительно хотите изменить данные в таблице:

update the_table t1 
    set directedlink_href = (select array_agg(substr(x.val,2) order by x.idx) from unnest(t1.directedlink_href) with ordinality as x(val,idx)); 

Это просто удаляет первый символ. Если вы, возможно, есть и другие символы в начале значения, вам нужно использовать regexp_replace(x.val,'^#', '') вместо substr(x.val,2)

+0

... Получил мой прогноз –

+0

Спасибо, что ответ сработал! – Chris

1

@a_horse_with_no_name получил мой upvote для более чистого и решения "Posgres-иш".
Я собирался удалить этот ответ, но после некоторых тестов кажется, что производительность мудрее этого решения имеет преимущество.
Поэтому я оставил бы это решение здесь, но я рекомендую выбрать решение @a_horse_with_no_name как правильный ответ.


Я использую chr (1), имеет символ, который, скорее всего, не появляется в элементах массива.

select string_to_array(substr(replace(array_to_string(directedlink_href,chr(1)),chr(1)||'#',chr(1)),2),chr(1)) 

from t 
; 
+0

Спасибо для вашего ответа, наиболее полезно! – Chris

+0

: -) .......................... –

0

Думаю, что это более простой и более общее решение, думал, что я разделю:

SELECT regexp_split_to_array(regexp_replace(array_to_string(ARRAY['#osgb4000000030451486','#osgb4000000030451491'], '__DELIMITER__'), '#', '', 'g'), '__DELIMITER__'); 
Смежные вопросы