Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Преобразовать SELECT  [new]
pakko
Member

Откуда:
Сообщений: 17
Есть выборка
SELECT foo FROM foo
которая возвращает строки наподобие
(2328,2325,"пр-кт Ленина, 217 стр 2")
(2328,2325,"пр-кт Ленина, 217 стр 3")
Но мне надо, чтобы строки SELECTa были наподобие:
2328•2325•пр-кт Ленина, 217 стр 2
2328•2325•пр-кт Ленина, 217 стр 3
Возможно ли это сделать?

Сообщение было отредактировано: 6 ноя 20, 12:55
6 ноя 20, 12:58    [22227469]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 753
pakko,

SELECT foo.* FROM foo;
6 ноя 20, 13:15    [22227480]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
pakko
Member

Откуда:
Сообщений: 17
Павел Лузанов,

одним столбцом :)
Причем это для разных таблиц, поэтому неизвестно сколько столбцов.
7 ноя 20, 06:02    [22227878]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 753
pakko,

Не до конца ясно что именно нужно получить. Но если речь о том, что записи из произвольной таблицы нужно выгрузить в виде строк, где поля чем-то разделены, то можно так:
COPY foo TO stdout DELIMITER '•';

А может и json-чик вполне устроит:
SELECT to_json(foo) FROM foo;
7 ноя 20, 11:12    [22227911]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
fte
Member

Откуда: Moscow
Сообщений: 386
pakko
Павел Лузанов,

одним столбцом :)
Причем это для разных таблиц, поэтому неизвестно сколько столбцов.


Видимо как-то так:
select translate(foo::text,',()"','•') from foo;


Сообщение было отредактировано: 7 ноя 20, 13:29
7 ноя 20, 13:31    [22227949]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
pakko
Member

Откуда:
Сообщений: 17
fte,

транслейт и в адресе запятую поменяет на •
Т.е. не
(2327,2325,"пр-кт Ленина, 217")
превращается в
2327•2325•пр-кт Ленина• 217
а надо
2327•2325•пр-кт Ленина, 217

Делема...


А мне надо чтобы он объединил все столбцы в одну строку, разделив их символом •, не меняя содержимого.
Смысл - упростить обновление базы когда появляются дополнительные столбцы. Не лопатить все функции. Да и функций у меня станет от этого меньше
Данные передаю в 1с7 через ОДБЦ драйвер.
8 ноя 20, 18:52    [22228426]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
pakko
Member

Откуда:
Сообщений: 17
Павел Лузанов,
json дает такую строку, более расширенную. Мне так не надо
{"x":2327,"xkont":2325,"aname":"пр-кт Ленина, 217"}
Ну копирование я как понимаю, будет в файл, а надо чтобы функция возвращала.
Но всё-равно, большое спасибо.
8 ноя 20, 18:58    [22228428]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
pakko
Member

Откуда:
Сообщений: 17
fte,
select translate(foo::text,',()"','•') from foo;
Да и убьёт в таблице все кавычки и скобки в результате запроса.
8 ноя 20, 18:59    [22228429]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать SELECT  [new]
pakko
Member

Откуда:
Сообщений: 17
Хорошо, возможно ли такое упрощение задачи
Есть таблица foo в ней три столбца
x::int, xkont::int и aname::text
Возможно ли при помощи некой функции f() сделать так, чтобы вместо трёх столбцов был один столбец - текстовый массив
select f(foo)::text[] FROM foo
причем явно к именам ячеек не обращаться, только к имени таблицы. А сама функция принимала на входе не только тип foo а могла обработать информацию и из других таблиц. Т.е. была универсальной.
Возможно ли такое? Или обязательно следует обращаться
11 ноя 20, 20:18    [22230423]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить