powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / generate_series: как ?
25 сообщений из 27, страница 1 из 2
generate_series: как ?
    #39622996
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) select (1,2,3)
row
record
(1,2,3)

2) SELECT generate_series(1,3)
generate_series
integer
1
2
3

Как привести второй вариант к первому варианту ?
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623002
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiy,
Код: plsql
1.
select unnest('{1,2,3}'::integer[])
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623004
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,

unnset
integer
1
2
3

Не то
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623009
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiy,

А, тебе в обратную сторону надо... я неправильно прочитал

Код: plsql
1.
2.
select '(' || string_agg(d, ',') || ')' from 
(select generate_series(1,3)::varchar d) a
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623020
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,
В итоге получается text. А как его перевести в record ?
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623046
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PerederiyAlex__kK,
В итоге получается text. А как его перевести в record ?
как-то так:
select (d) from (select generate_series(1,3)::varchar d) a
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623051
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, не так
record тут не может получиться, т.к. он колонки объединяет, а тут строки
массив тут: select array_agg(a) from (select generate_series(1,3)) a;
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623092
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiy,

Продолжаем дальше гадать на кофейной гуще
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623116
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PerederiyAlex__kK,
В итоге получается text. А как его перевести в record ?

Объясните зачем. За 18 лет работы с postgres никогда не приходилось анонимные рекорды генерировать через generate_series и вообще из строк. Скорее всего вы что то не то делаете.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623531
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukPerederiyAlex__kK,
В итоге получается text. А как его перевести в record ?

Объясните зачем. За 18 лет работы с postgres никогда не приходилось анонимные рекорды генерировать через generate_series и вообще из строк. Скорее всего вы что то не то делаете.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
да пивот он хочет динамический.


последний раз я такое делал через генерацию динамо препаре в анонимке и его екзекъют сразу за, вне оной. мультикомандой.

(анонимку можно заменить хранимкой) да и препаред можно курсором заменить.
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623541
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
do $$
declare
v_sql text;
begin 	
	select CONCAT(
			CASE WHEN exists(select * from pg_prepared_statements  where name = 'foo')
				THEN 'DEALLOCATE FOO;'
				END
			,'PREPARE FOO AS
			SELECT ',string_agg( CONCAT (g ,' AS ', quote_ident(g::text)),',') 
			)
	FROM generate_series(1,13) g
	INTO v_sql;
	raise notice  '%' ,v_sql;
	EXECUTE v_sql; 
end;
$$; EXECUTE FOO;
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623573
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

исходный запрос был
select * from table where d in (1,2,3)

все работало
но
изменились условия - количество членов в (1,2,3) может любым
те
надо типа
select * from table where d in (generate_series (1,2,3))
но так не работает
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623574
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
те
надо типа
select * from table where d in (generate_series (1,3))
но так не работает
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623578
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiy,

Заменить generate_series() на VALUES попробовать стоит.
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623579
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiyвсе работало
но
изменились условия - количество членов в (1,2,3) может любым
Ммм, если вы знаете начало и конец - то и напишите запрос на диапазон.
Если вам нужен in по списку значений - то и напишите in со списком значений
Вы явно придумываете проблему там где её нет.
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623580
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiy,

мда.

Код: sql
1.
2.
3.
select * from table where d in (select generate_series (1,3))
или
select * from table where d in (select id from generate_series (1,3) gs(id))



все равно непонятно, зачем такая конструкция с in и generate_series может понадобиться.
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623581
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,

ничего не понял
можно примеры
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623582
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexiusPerederiy,

мда.

Код: sql
1.
2.
3.
select * from table where d in (select generate_series (1,3))
или
select * from table where d in (select id from generate_series (1,3) gs(id))



все равно непонятно, зачем такая конструкция с in и generate_series может понадобиться.

второй запрос работать не будет

мне надо сравнить значение с одной из цифр входящих в числовой ряд
конечное значение ряда может меняться
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623585
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiy,

Код: sql
1.
where d >= 1 and d <= 3


Код: sql
1.
where d between 1 and 3


Код: sql
1.
where d in (1,2,3,4,5,6,вставьтеихвзапросскольконужно_хотялучшенетысячами)
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623586
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78,

select * from price where price_id in (
select array_agg(a) from (select generate_series(1,3)) a)

ШИБКА: оператор не существует: integer = record[]
СТРОКА 1: select * from price where price_id in (
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623588
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PerederiyAlexiusPerederiy,

мда.

Код: sql
1.
2.
3.
select * from table where d in (select generate_series (1,3))
или
select * from table where d in (select id from generate_series (1,3) gs(id))



все равно непонятно, зачем такая конструкция с in и generate_series может понадобиться.

второй запрос работать не будет

мне надо сравнить значение с одной из цифр входящих в числовой ряд
конечное значение ряда может меняться


Код: sql
1.
2.
select * from generate_series(0,10000,137) AS  t(d) where d
in (select id from generate_series (0,10000,13) gs(id))
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623589
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiytip78,

select * from price where price_id in (
select array_agg(a) from (select generate_series(1,3)) a)

ШИБКА: оператор не существует: integer = record[]
СТРОКА 1: select * from price where price_id in (

Код: sql
1.
2.
select * from generate_series(0,10000,137) AS  t(d) where d
= any (ARRAY (select id from generate_series (0,10000,13) gs(id)));
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623591
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

так работает
но мне надо сравнить одно id integer
в этом случае не работает
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623593
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perederiytip78,

select * from price where price_id in (
select array_agg(a) from (select generate_series(1,3)) a)

ШИБКА: оператор не существует: integer = record[]
СТРОКА 1: select * from price where price_id in (

Код: sql
1.
2.
select * from generate_series(0,10000,137) AS  t(d) where 
d=any((select array_agg(id) f from generate_series (0,10000,13) gs(id))::integer[])



а вот тут случился колхоз обыкновенный. печаль.
Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from generate_series(0,10000,137) AS  t(d) where 
d=any(select array_agg(id) f from generate_series (0,10000,13) gs(id));
-- кто-то в парсер насрал
ERROR: operator does not exist: integer = integer[]
SQL-состояние: 42883
Подсказка: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Символ: 61



2ТС вы таки протрезвейте для начала. потом сформулируйте, что же вам надо. а мы пж--баги поизучаем
...
Рейтинг: 0 / 0
generate_series: как ?
    #39623595
Perederiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

спасибо мелкому
что-то меня на in и generate перемкнуло
все же очень просто решается

предпенсионный возраст сказывается
на пж с 2004 года
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / generate_series: как ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]