Допустим, у вас есть 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 в виде заголовков столбцов CSV и кортежи запросов в виде строк CSV.
ч / т 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 извлекает его как массив целых чисел.