sql - 在 PgAdmin 的 Postgresql 中使用反向 for 循环反转数字

标签 sql postgresql plpgsql

我正在尝试反转字符串,假设“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

Demo

关于sql - 在 PgAdmin 的 Postgresql 中使用反向 for 循环反转数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251134/

相关文章:

python - Sqlite3游标实时更新?

SQLRPGLE。我的 SQL 查询有问题吗?

sql - 如果主 SQL Server 关闭,则连接到辅助 SQL Server

sql - 从 PostgreSQL 函数返回值

ruby-on-rails - Rails 4 Postgresql 数组数据类型 : updating values

postgresql - 如何将用户定义的类型变量作为参数传递给函数?

mysql - 使用内部连接在 SQL 中计算

postgresql - 冲突列上的 Postgres 10 与返回表中的列同名 = 不明确

PostgreSQL: 月 := 间隔 '30 days' ;

postgresql - 将带有 CSV 的 varchar 参数转换为列值 postgres