0

想象一个像这样的表:

create table test (depth integer, name text);

添加一些行:

insert into test (depth, name)
values (0, "no indent"), (1, "single indent"), (2, "double indent");

现在,根据如下depth所示的参数创建输出:

no indent
    single indent
        double indent

在这种情况下,缩进是 4 个空格(但可以更改为任何有趣的缩进,例如制表符)。

我的直觉想做这样的事情:

select '    ' * depth || name from test order by depth;

然而,这在 Postgres 中爆发了。像这样的字符串乘法在 Python 中按预期工作。但是,我不熟悉 Postgres 中的等效操作。其他数据库实现也会很有趣。

4

2 回答 2

2

使用lpad()

select lpad(name, (4 * depth) + length(name), ' ')
from test 
order by depth;

repeat()加连接:

select repeat('_', 4 * depth) || name
from test 
order by depth;

http://www.postgresql.org/docs/current/static/functions-string.html

于 2013-03-15T21:59:08.307 回答
1

我无权访问 Postgresql,但在 SQL Fiddle 上,前导空格会被自动抑制。

I changed space to underscore and it works.

My code (based on REPEAT):

select REPEAT(REPEAT('_', 4), depth) || name as "Column" from test order by depth;

Link to the SQL Fiddle with your data: http://sqlfiddle.com/#!1/96f11/4

于 2013-03-15T22:08:27.097 回答