2009-12-22 14 views
10

मैं PostgreSQL के साथ एक प्रथम दर्दनाक अनुभव हो रही हैं और पल का मिनट-दर चुनौती है:Postgresql - concat_ws फ़ंक्शन की तरह?

कैसे PostgreSQL में एक concat_ws प्रदर्शन करने के लिए, से एक समूह से कई क्षेत्रों मूल्य शामिल होने के लिए:

select concat_ws(';',field_lambda) from table_lambda group by id; 
+2

का उपयोग का समर्थन करना चाहते (concat_ws होगा की तरह) एकाधिक स्तंभों के साथ काम नहीं करेंगे, concat_ws PostgreSQL 9.1 में होगा : http://developer.postgresql.org/pgdocs/postgres/functions-string.html –

+0

.. लेकिन पोस्टग्रेस 'concat_ws()' में * एक समग्र कार्य नहीं है। इसके बजाए 'string_agg()' का प्रयोग करें। निचे देखो। –

उत्तर

14

PostgreSQL 8.4 के लिए और अधिक:

select ARRAY_TO_STRING(
    ARRAY_AGG(field_lambda),';' 
) from table_lambda group by id; 
+1

धन्यवाद, यह काम करता है। – Gzorg

2

बिना array_agg (8.4 से पहले), तो आप उपयोग कर सकते हैं:

SELECT array_to_string(
    ARRAY(SELECT field_lambda FROM table_lambda GROUP BY id), ';' 
); 
0

PostgreSQL wiki के अनुसार, आप पोस्टग्रेएसक्यूएल 8.4 array_agg फ़ंक्शन को अनुकरण करने के लिए जो आपको चाहिए उसे प्राप्त करने के लिए अनुकरण कर सकते हैं।

CREATE AGGREGATE array_agg(anyelement) (
    SFUNC=array_append, 
    STYPE=anyarray, 
    INITCOND='{}' 
); 
4

PostgreSQL के बाद से 9.0 (सितंबर 2010 को जारी), वहाँ एकीकृत फ़ंक्शन string_agg() क्या आप चाहते हैं लगता है क्या करना है:

SELECT string_agg(field1, ';') FROM tbl GROUP BY id; 

ध्यान दें, कि दूसरा पैरामीटर विभाजक है (अन्य कुल कार्यों के समान)।

वहाँ, PostgreSQL 9.1 के बाद से स्ट्रिंग समारोह concat_ws() भी है कि अन्यथा रूप में एक ही कर रहा है MySQL के concat_ws() (जब समेकित फ़ंक्शन के रूप में दुरुपयोग नहीं)। NULL मानों से निपटने के लिए यह विशेष रूप से उपयोगी है।

SELECT concat_ws(';', field1, field2, field3) FROM tbl 

आप दोनों कॉलम को किसी भी तरह से एग्रीग्रेगेट करने के लिए भी जोड़ सकते हैं।

SELECT id, string_agg(concat_ws(',', field1, field2, field3), ';') AS fields 
FROM tbl 
GROUP BY id; 
-1

इसके अलावा लोगों को यहां इस समस्या के लिए आ रहा है, इस विधि यदि आप कई colums FYI करें

ARRAY_TO_STRING(ARRAY[$columns_string], 'my_delimiter'). 
संबंधित मुद्दे