สมมติว่าคุณมีSELECT id from table
ข้อความค้นหา (กรณีจริงคือแบบสอบถามที่ซับซ้อน) ที่ส่งคืนผลลัพธ์หลายรายการ
ปัญหาคือจะรับid
ผลตอบแทนทั้งหมดในแถวเดียวโดยคั่นด้วยจุลภาคได้อย่างไร
สมมติว่าคุณมีSELECT id from table
ข้อความค้นหา (กรณีจริงคือแบบสอบถามที่ซับซ้อน) ที่ส่งคืนผลลัพธ์หลายรายการ
ปัญหาคือจะรับid
ผลตอบแทนทั้งหมดในแถวเดียวโดยคั่นด้วยจุลภาคได้อย่างไร
array_agg()
ฟังก์ชันโดยเฉพาะ
คำตอบ:
SELECT string_agg(id::text, ',') FROM table
ต้องใช้ PostgreSQL 9.0 แต่นั่นไม่ใช่ปัญหา
string_agg(CAST(id as varchar), ',')
แทน
string_agg(id::text, ',')
select string_agg(id, ', ' order by id desc) from table
STRING_AGG(DISTINCT customer_name, ',')
คุณสามารถใช้ฟังก์ชัน array () และ array_to_string () ในการสร้างข้อความค้นหาของคุณได้ ด้วยSELECT array( SELECT id FROM table );
คุณจะได้รับผลเช่น: {1,2,3,4,5,6}
จากนั้นหากคุณต้องการลบเครื่องหมาย {} ออกคุณสามารถใช้ฟังก์ชัน array_to_string () และใช้ลูกน้ำเป็นตัวคั่นดังนั้น: SELECT array_to_string( array( SELECT id FROM table ), ',' )
จะได้ผลลัพธ์ดังนี้: 1,2,3,4,5,6
SELECT array_to_string( id, ',' ) AS id FROM table
คุณสามารถสร้าง CSV จากแบบสอบถาม SQL โดยใช้ psql:
$ psql
> \o myfile.csv
> \f ','
> \a
> SELECT col1 AS column1, col2 AS column2 ... FROM ...
myfile.csv ที่เป็นผลลัพธ์จะมีชื่อคอลัมน์ SQL resultset เป็นส่วนหัวคอลัมน์ CSV และคิวรี tuples เป็นแถว CSV
h / t http://pookey.co.uk/wordpress/archives/51-outputting-from-postgres-to-csv
ใช้ array_to_string () & array () ฟังก์ชันเดียวกัน
select array_to_string(array(select column_name from table_name where id=5), ', ');
string_agg()
?
SELECT array_agg(id, ',') FROM table
{1,2,3,4}
ฉันใช้ Postgres 11 และ EntityFramework กำลังดึงข้อมูลเป็นอาร์เรย์ของจำนวนเต็ม