如何对所有字母a到z(a-z)进行循环查询?

时间:2018-12-27 02:45:50

标签: postgresql

这是我执行的查询:

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 :(得分:2)

chr(int) function具有给定代码的字符。对于UTF8,该参数被视为Unicode代码点。对于其他多字节编码,该参数必须指定一个ASCII字符。不允许使用NULL(0)字符,因为文本数据类型无法存储此类字节。

SELECT chr(n)
FROM GENERATE_SERIES(97, 97+25) AS t(n);

答案 1 :(得分:0)

对第二个循环做一些修改:

   counter := 64 ; 
   for hasil in EXECUTE hsl
            loop     
    counter := counter + 1 ;                                    
    select hasil into hasile;
    select concat(chr(counter), '|', hasil);
    END LOOP ;