mysql shell
并键入SELECT * FROM users
,则会显示-+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
| USERID | NAME | EMAILID | PASSWORD | USER_TYPE | CONTACT_ID_FKUSERS | COMPANY_ID_FKUSERS |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
| 137 | X | b@cc.com | # | ADMIN | 166 | 110 |
| 138 | Kshitiz | ksharma@aaa.com | asdf | ADMIN | 167 | 111 |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
Oracle sqlplus
显示-USERID NAME EMAILID PASSWORD USER_TYPE CONTACT_ID_FKUSERS COMPANY_ID_FKUSERS
---------- ----- ---------- ---------- ---------- ------------------ ------------------
137 X b@cc.com # ADMIN 166 110
137 X b@cc.com # ADMIN 166 110
Sqlite shell
显示-137|X|b@cc.com|#|ADMIN|166|110
138|Kshitiz|ksharma@aaa.com|asdf|ADMIN|167|111
是否可以美化
sqlite shell
的输出?是否有比默认分发更好的替代shell? (仅限CLI客户)
#1 楼
对于“人类可读”输出,可以使用column
模式,并打开标头输出。这将使您获得与示例中的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
评论
美丽,谢谢!内容不合适(水平),并且似乎没有内置的寻呼机,因此我不得不在echo s中使用echo -e'.mode column \ n.headers on \ nselect * from sip_foo; \ n'| sqlite3 database.sqlite | less -S可以使每行一行而不进行自动换行。
– Rob W
15年8月7日在15:32
但是请注意,您可能需要使用.width命令使列变宽。否则,您的内容将在视觉上被截断。
– mlissner
2015年9月25日23:30在
您可能还需要添加.separator ROW“ \ n”,以使行之间用换行符分隔。我的不是,并且输出不可读。
– Boxuan
17年5月11日在15:08
如果您不想每次都手动执行此操作,可以将其添加到〜/ .sqliterc文件中。
– ijoseph
18年7月2日,0:57
@RobW可以使用-cmd开关添加命令参数,因此无需回显它。像这样:sqlite3 database.sqlite -cmd“ .mode column” -cmd“ .headers on”“从sip_foo中选择*” |少-S
–亚当山
11月10日13:16
#2 楼
所有答案都提供了您可以在SQLite控制台或通过CLI键入的设置,但是没有人提到可以将这些设置放入RC文件中,从而避免了始终都键入这些设置。将其另存为~/.sqliterc
:.mode column
.headers on
.separator ROW "\n"
.nullvalue NULL
请注意,我还为空值添加了占位符,而不是默认的空字符串。
#3 楼
对于那些有兴趣获得相同结果的用户,除了从命令行运行sqlite之外。我发现以下操作不起作用:$ sqlite3 <dbfile> ".headers on;.mode column;select * from MyTable"
Error: mode should be one of: ascii column csv html insert line list tabs tcl
相反,您必须在sqlite命令中使用-column和-header选项,如下所示:
$ sqlite3 -column -header <dbfile> "select * from MyTable"
使用:
$ sqlite3 --version 3.8.11.1 2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f
评论
尽管没有设置列宽的选项,但可以采用以下解决方法:echo -e“ .n上的.headers \ n.mode列\ n.width 10 20 500 \ n select * from MyTable” | sqlite3
–ruvim
17年8月24日14:35
我认为您的错误是使用分号而不是“ .headers on \ n.mode列\ n等”
–deed02392
17年11月17日在14:41
@ruvim或从CLI使用.mode csv或-csv
– qwr
19-10-24在21:25
#4 楼
我总是使用.mode line
垂直打印查询结果,类似于MySQL的
\G
修饰符。#5 楼
我还不能发表评论...除了Mat和mlissner已经提供的出色答案之外,在任何情况下,在为sqlite shell提供正确的格式(使用.mode column
和.headers on
作为如上所述),也有可能使用.explain
,因此会显示一列的全部内容。输出可能非常混乱(在视觉情况下),然后可以使用.explain off
返回以前的格式,并再次使用更具“人类可读性”的格式查看它。可以使用这种方法与输出格式化程序命令结合使用,以及作为查看数据库/列的完整数据的临时解决方案,如使用
.width
一样,您始终必须提供准确的字符数才能获得列数据的完整输出。 有关更改输出格式的更多信息,请快速参考o默认的CLI文档:
https://www.sqlite.org/cli.html
#6 楼
我的看上去像一团糟,没有换行符。 @Boxuan在上发表评论您可能还想添加.separator ROW“ \ n”,以便行之间用换行符分隔。我的不是,我的输出也不可读。
– Boxuan,5月11日,15:08
评论
您正在使用哪个系统?在macOS上没有这样的问题
–ospider
18年4月9日在2:51
#7 楼
为方便起见,可以使用.mode tabs
。sqlite> select * from user;
name age
Bob 18
Ali 19
#8 楼
除了已经说过的所有内容之外,您还可以使用.width控制显示的列的宽度。示例
.width 8 0 3 9
那么您的输出将显示第一列的宽度为8个字符,第二列自动调整(如下所示),第三列的宽度为3个字符,第四列的宽度为9个字符。
.width,请使用别名名称加空格。
优点是,您仅在查询中动态调整宽度,
那些需要额外宽度的列,其余列将继续使用
自动调整宽度。
所有列将使用自动调整宽度,该宽度基于
sqlite文档宽度规则:
如果您指定宽度为0的列,则该列的宽度会自动
调整为三个数字中的最大值:10,标题的宽度和
第一行数据的宽度。这样可以使列宽自动调整。
每列的默认宽度设置均为此自动调整0值。
假设您的表“ my_table”具有列“名称”,“年龄”和“地址”。
您有兴趣展示:
“名称”:前20个字符
“年龄”:自动调整
“地址”:前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;
您的输出:
name age address
-------------------- ---------- ------------------------------
short name 22 my house
my name is very long 22 i live in my house somewhere i
评论
真正定制的输出格式:stackoverflow.com/questions/23120906/…