在终端中使用SQLite时,这纯粹是为了让人眼前一亮,但有没有办法用标题格式化列宽,以便每个标题都适当调整大小(并且独立于其他列)?换句话说,这是
的输出.width auto
表示简单的表格
Id Name Price
---------- ---------- ----------
1 Audi 52642
2 Mercedes 57127
3 Skoda 9000
4 Volvo 29000
5 Bentley 350000
6 Citroen 21000
7 Hummer 41400
8 Volkswagen 21600
它符合我的期望。它调整每列的大小,以便显示任何一列中的最长项。但是,我希望自动将输出格式化为使得每列足够宽,以便仅列中的最长项目。换句话说,我不想输入
.width 2 10 5
获得此输出后
Id Name Price
-- ---------- -----
1 Audi 52642
2 Mercedes 57127
3 Skoda 9000
4 Volvo 29000
5 Bentley 35000
6 Citroen 21000
7 Hummer 41400
8 Volkswagen 21600
我能做些什么来正确自动化列大小调整吗?
答案 0 :(得分:6)
对于"人类可读"输出,您可以使用column
模式,然后打开header
输出。这将为您提供类似于示例中sqlplus
输出的内容:
sqlite> select * from foo;
234|kshitiz|dba.se
sqlite> .mode column
sqlite> select * from foo;
234 kshitiz dba.se
sqlite> .headers on
sqlite> select * from foo;
bar baz baf
---------- ---------- ----------
234 kshitiz dba.se
答案 1 :(得分:3)
来自SQLite的文档:
如果指定列的宽度为0,则列宽会自动调整为三个数字的最大值:10,标题的宽度和第一行数据的宽度。这使得列宽度自我调整。每列的默认宽度设置是此自动调整0值。
答案 2 :(得分:3)
.width的替代名称,请使用别名加上空格。
优点是,您仅在以下情况下动态调整查询中的宽度: 那些需要额外宽度的列,其余列继续使用 自动调整宽度。
所有列都将使用自动调整宽度,该宽度基于 sqlite documentation width rule:
如果您指定宽度为0的列,则列宽将自动 调整为三个数字的最大值:10,标题的宽度和 第一行数据的宽度。这样可以使列宽自动调整。 每列的默认宽度设置是此自动调整的0值。
假设您的表“ my_table”具有“名称”,“年龄”和“地址”列。 您有兴趣展示:
您的查询将是:
.mode columns
.headers on
CREATE TABLE my_table (name TEXT, age INTEGER, address TEXT);
INSERT INTO my_table VALUES ("short name",
22, "my house");
INSERT INTO my_table VALUES ("my name is very long",
22, "i live in my house somewhere in the planet Earth");
SELECT name AS "name ",
age,
address AS "address "
FROM my_table;
您的输出:
name age address
-------------------- ---------- ------------------------------
short name 22 my house
my name is very long 22 i live in my house somewhere i
答案 3 :(得分:2)
sqlite3
工具没有这样的功能。
您必须手动计算列宽(SELECT max(length(col1)) ...
)。
答案 4 :(得分:2)
您可以使用简单的awk脚本,例如:
sqlite3 -batch -list db "select ..." awk -F'|' '{printf "%3s %4s %s\n", $1, $2, $3}'
很简单。还比sqlite的列模式更容易,更灵活。
答案 5 :(得分:1)
您可以使用rlwrap
和column
自动执行此操作:
$ rlwrap -a -N -c -z pipeto sqlite3 -header foo.db
> select * from cars; | column -n -t -s '|'
有关详细信息,请参阅我对sqlite3 is chopping/cutting/truncating my text columns的回答。
答案 6 :(得分:0)
我知道这个问题有点老了,但是对于将来的问题,您可以指定所有具有不同长度的输出列的宽度。例如:
sqlite > .width 5 25 15
答案 7 :(得分:-1)
正确答案是: sqlite> .mode 列 sqlite> .width 2 10 5
试一试