在PgAdmin中的Postgresql中使用reverse for循环反转一个数字

时间:2015-12-13 12:36:21

标签: sql postgresql plpgsql

我正在尝试反向字符串,让我们说'1234'使用reverse for循环。  但输出结果为<NULL>

    DO $$
    DECLARE
    L_NO VARCHAR(5) := '1234';
    L_LEN NUMERIC(5);
    L_REV_NO VARCHAR(5);
    BEGIN
    L_LEN := CHAR_LENGTH(L_NO) ;
    RAISE NOTICE 'STRING LENGTH IS %' , L_LEN  ;
    FOR  CNTR IN  REVERSE  L_LEN..1 LOOP
   L_REV_NO = L_REV_NO||SUBSTRING(L_NO,CNTR,1);
    END LOOP;
    RAISE NOTICE 'NUMBER IS %' ,L_NO ;
    RAISE NOTICE 'REVERSE NUMBER IS %' ,L_REV_NO ;
    END $$ ;

输出

NOTICE:  STRING LENGTH IS 4
NOTICE:  NUMBER IS 5484
NOTICE:  REVERSE NUMBER IS <NULL>

任何建议我做错了什么。??

1 个答案:

答案 0 :(得分:0)

当您使用:L_REV_NO = L_REV_NO||SUBSTRING(L_NO,CNTR,1);时,您执行L_REV_NO = NULL || ... => NULL

您需要先初始化L_REV_NO变量:

 DO $$
    DECLARE
    L_NO VARCHAR(5) := '1234';
    L_LEN NUMERIC(5);
    L_REV_NO VARCHAR(5) = '';
    BEGIN
    L_LEN := CHAR_LENGTH(L_NO) ;
    RAISE NOTICE 'STRING LENGTH IS %' , L_LEN  ;
    FOR  CNTR IN  REVERSE  L_LEN..1 LOOP
   L_REV_NO = L_REV_NO||SUBSTRING(L_NO,CNTR,1);
    END LOOP;
    RAISE NOTICE 'NUMBER IS %' ,L_NO ;
    RAISE NOTICE 'REVERSE NUMBER IS %' ,L_REV_NO ;
    END $$ ;

另一个简单的解决方案是使用内置的REVERSE函数。

SELECT REVERSE('1234')
-- 4321

Demo