2015-07-13 4 views
0

Я Результирующий набор запроса select * from personal."phoneNumbers" как этот префиксомвернуть одну строку из данных colums

pref |number 
-----|-------- 
"12 "|"4589524" 
"077"|"7090701" 
"050"|"2561024" 

Но я хочу, чтобы вернуть данные как

(12) 4589524;(077) 7090701; (050) 2561024 

Как сделать это с PostgreSQL?

+0

Используйте конкатенацию ('||') и 'string_agg'. См. Связанный вопрос. –

+0

@CraigRinger Трудно отметить это как дубликат, по крайней мере, указанного вопроса. Вышеупомянутая проблема требует обрезки и конкатенации * до * до 'string_agg', что делает ее намного менее простой, чем в ответе. – Patrick

+1

'SELECT string_agg ('(' || btrim (pref) || ')' || number, ';') AS pref_number FROM personal." PhoneNumbers "' – Patrick

ответ

0

Вы можете использовать операторы строки и функции для построения одного номера телефона в формате, который вы хотите:

'(' || btrim(pref) || ') ' || number 

Это, очевидно, дает строку для каждой записи, которую обработки. Затем вы можете использовать функцию агрегации string_agg() в строку (не каламбур) расширенные телефонные номера из всех записей вместе в единое целое, с соответствующим разделителем между номерами телефонов:

SELECT string_agg('(' || btrim(pref) || ') ' || number, '; ') AS pref_number 
FROM personal."phoneNumbers" 
Смежные вопросы