Как сделать цикл запроса для всего алфавита от А до Я (AZ)? - PullRequest
0 голосов
/ 27 декабря 2018

это запрос, который я превышаю:

CREATE OR REPLACE FUNCTION alphabetloop () 
   RETURNS RECORD AS $$ 
DECLARE
   counter INTEGER := 64 ; 
   hsl text :=  'select 1';
   hasil RECORD;
   hasile RECORD;
   i INTEGER := 0 ; 
   j INTEGER := 1 ;
BEGIN

LOOP 
EXIT WHEN counter = 90 ; 
counter := counter + 1 ; 
SELECT j, i + j INTO i, j ;
select concat(hsl,concat(' union all select count(*) FROM public.table_name where field_name like ''',(concat(chr(counter),'%''')))) into hsl;
END LOOP ; 
for hasil in EXECUTE hsl
        loop                                        
select hasil into hasile;
RAISE NOTICE '% : %', chr(counter),hasil;
END LOOP ; 

RETURN hasile;
END ; 
$$ LANGUAGE plpgsql;

select alphabetloop();

вывод данных: ("(13911)")

вывод сообщения:

ВНИМАНИЕ: Z: (1)

УВЕДОМЛЕНИЕ: Z: (3411)

УВЕДОМЛЕНИЕ: Z: (446)

...

УВЕДОМЛЕНИЕ: Z: (13)

Успешно бежать.Общее время выполнения запроса: 52 с 47 мс.Затронуты 1 строка.

есть ли способ вернуть вывод данных в виде:

A |(1)

B |(3411)

C |(446)

D |(166)

...

Z |(13) * * тысяча тридцать-дв

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

chr (int) функция Символ с заданным кодом.Для UTF8 аргумент обрабатывается как кодовая точка Unicode.Для других многобайтовых кодировок аргумент должен обозначать символ ASCII.Символ NULL (0) недопустим, поскольку текстовые типы данных не могут хранить такие байты.

SELECT chr(n)
FROM GENERATE_SERIES(97, 97+25) AS t(n);
0 голосов
/ 27 декабря 2018

Измените ваш второй цикл:

   counter := 64 ; 
   for hasil in EXECUTE hsl
            loop     
    counter := counter + 1 ;                                    
    select hasil into hasile;
    select concat(chr(counter), '|', hasil);
    END LOOP ; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...