SQLite3终端输出格式.width

log*_*son 14 sql sqlite terminal formatting

在终端中使用SQLite时,这只是一个纯粹的眼睛糖果,但有没有办法用标题格式化列宽,以便每个标题适当调整大小(并独立于其他列)?换句话说,这是输出

.width auto
Run Code Online (Sandbox Code Playgroud)

一张简单的桌子

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 
Run Code Online (Sandbox Code Playgroud)

它做了我所期望的.它调整每列的大小,以便显示任何一列中最长的项目.但是,我想自动对输出进行格式化,使得每列足够宽,仅用于其列中的最长项.换句话说,我不想输入

.width 2 10 5
Run Code Online (Sandbox Code Playgroud)

事后得到这个输出

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
Run Code Online (Sandbox Code Playgroud)

我能做些什么来正确自动化列大小调整吗?

小智 7

对于"人类可读"输出,您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 这都是真的,但它实际上根本没有回答专门询问自动设置适当的列宽的问题。所以我不知道为什么它是目前得票最多的答案。 (6认同)

CL.*_*CL. 5

sqlite3工具没有这样的功能。

您必须手动计算列宽 ( SELECT max(length(col1)) ...)。

  • 我使用过很多数据库...我不敢相信 SQL 让这变得如此困难。当人们想要探索 SQLite 数据而不被截断并且不想在每次查询之前重置宽度时,他们会做什么? (11认同)

小智 5

SQLite的文档中:

如果您将列的宽度指定为0,则列的宽度将自动调整为三个数字的最大值:10,标题的宽度和数据的第一行的宽度。这样可以使列宽自动调整。每列的默认宽度设置是此自动调整0值。


lui*_*_js 5

除了 .width 之外,还可以使用用空格填充的别名。

优点是您只在查询中动态调整那些需要额外宽度的列的宽度,而其余列则继续使用自动调整宽度。

所有列都将使用自动调整宽度,该宽度基于 sqlite 文档宽度规则:

如果指定列宽为 0,则列宽将自动调整为三个数字中的最大值:10、标题宽度和第一行数据的宽度。这使得列宽能够自动调整。每列的默认宽度设置就是这个自动调整的 0 值。

假设您的表“my_table”具有“姓名”、“年龄”和“地址”列。您有兴趣展示:

  1. “名称”:前 20 个字符
  2. “年龄”:自动调整
  3. “地址”:前 30 个字符

您的查询将是:

.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;
Run Code Online (Sandbox Code Playgroud)

你的输出:

name                  age         address                       
--------------------  ----------  ------------------------------
short name            22          my house                      
my name is very long  22          i live in my house somewhere i
Run Code Online (Sandbox Code Playgroud)