我正在尝试反向字符串,让我们说'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>
任何建议我做错了什么。??
答案 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