想象一下这样的表:
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中的等效操作。其他数据库实现也很有趣。
答案 0 :(得分: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
答案 1 :(得分:1)
我无法访问Postgresql,但在SQL Fiddle前导空格会被自动抑制。
我将空格改为下划线并且有效。
我的代码(基于REPEAT
):
select REPEAT(REPEAT('_', 4), depth) || name as "Column" from test order by depth;
使用您的数据链接到SQL Fiddle:http://sqlfiddle.com/#!1/96f11/4