一尘不染

如何使用SQLite模拟LPAD / RPAD

sql

我很好奇如何以最通用的方式正式为SQLite模拟RPAD和LPAD函数。目标是能够做到

LPAD(column, character, repeat)
RPAD(column, character, repeat)

对于非固定表列columncharacterrepeat。如果characterrepeat是已知常数,那么这将是一个好的可行的解决方案:

但是,如果上面的代码应该这样执行:

SELECT LPAD(t.column, t.character, t.repeat) FROM t
SELECT LPAD(t.column, some_function(), some_other_function()) FROM t
SELECT LPAD(t.column, :some_bind_variable, :some_other_bind_variable) FROM t

LPAD一般如何模拟此功能?我迷失了这种可能性:

一个相关的问题:


阅读 145

收藏
2021-03-17

共1个答案

一尘不染

@ user610650解决方案的一个更简单的版本,使用hex()代替quote(),并且除了char padding外还可以使用字符串padding:

X = padToLength
Y = padString
Z = expression

select
    Z ||
    substr(
        replace(
            hex(zeroblob(X)),
            '00',
            Y
        ),
        1,
        X - length(Z)
    );
2021-03-17