我正在尝试反转字符串,假设“1234”使用反转循环。
但输出为 <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>
对我做错了什么有什么建议吗??
最佳答案
当你使用: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
关于sql - 在 PgAdmin 的 Postgresql 中使用反向 for 循环反转数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251134/