我的值已被切断,并希望显示完整的值。
Sqlite3 -column -header locations.dbs "
select n.namelist, f.state, t.state
from names n
left join locations l on l.id = n.id
left join statenames f on f.st = l.st
left join statenames t on t.st = l.stto
where n.timing > 200601 and count(n.timing)<=15"
哪个给了我
name From State To State
---------- ----------- ----------
Jack Connecticut Louisiana
Jeff Danie New Hampshi New Hampsh
名称被截断为10个字符或第一行数据的长度,以较长者为准。如何在不使列大于它们的情况下阻止这种情况发生?
由于
答案 0 :(得分:15)
似乎没有办法让它自动化,但您可以使用.width
命令手动指定列宽。
请参阅here(搜索.width
部分)。
答案 1 :(得分:7)
你可以像这样使用column(unix命令):
sqlite3 -list -separator "|" -header db.dbs "Select ...." | column -t -s "|"
-list
和-separator
可以省略,因为它们是默认值
答案 2 :(得分:1)
在answer by zuloo上展开,可以使用交互式提示并具有自动列宽。
除了L
之外,如果您使用的是Ubuntu,还需要rlwrap(column
)。你这样运行:
sudo apt-get install rlwrap
或者您可以在rlwrap -a -N -c -z pipeto sqlite3 -header locations.dbs
或类似内容中添加别名:
.bashrc
在sqlite控制台中,您可以像这样运行查询:
alias sqlite="rlwrap -a -N -c -z pipeto sqlite3 -header"
或者,为了使其更好,请在select * from names; | column -n -t -s '|'
:
$PATH
让我们说它被称为#!/bin/bash
column -n -t -s '|'
,不要忘记使其pp
可执行。然后您可以使用如下的交互式提示:
chmod u+x pp
答案 3 :(得分:0)
我确实在寻找完全相同问题的解决方案,我发现了解决方法:
sqliteresult=`sqlite3 -header -list $SQLITE_FILE "SELECT * ..." | tr "\\n" ";"`
sqliteresult="${sqliteresult/;/;-----------------------------;}"
sqliteresult="${sqliteresult//;/\n}"
sqliteresult="${sqliteresult//|/\t|\t}"
echo -e $sqliteresult
希望它有所帮助:)
〜斯特凡
答案 4 :(得分:0)
这是格式化多个表并以漂亮的格式显示rowid的另一种方法。
#/usr/bin/env bash
cli_opts="-header"
for table in "table1" "table2"; do
select="select rowid as ' ', * from $table;"
#echo "$select"
echo "$table"
sqlite3 $cli_opts database.db "$select" | column -t -s "|"
echo -e '\n'
done