34

我的值被截断,想显示完整的值。

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 个字符或第一行数据的长度,以较长者为准。如何在不使列大于必须的情况下阻止这种情况的发生?

谢谢

4

5 回答 5

27

似乎没有办法让它自动,但您可以使用该.width命令手动指定列宽。

这里(搜索部分.width)。

于 2009-11-17T19:38:41.420 回答
12

你可以像这样使用列(unix命令):

sqlite3 -list -separator "|" -header db.dbs "Select ...." | column -t -s "|"

-list并且-separator可以省略,因为它们是默认值

于 2013-12-07T22:37:22.453 回答
1

通过 zuloo扩展答案,可以使用交互式提示并具有自动列宽。

除了column你还需要rlwrapsudo apt-get install rlwrap如果你在 Ubuntu 上)。你像这样运行它:

rlwrap -a -N -c -z pipeto sqlite3 -header locations.dbs

或者您可以在您的.bashrc或类似的名称中添加别名:

alias sqlite="rlwrap -a -N -c -z pipeto sqlite3 -header"

在 sqlite 控制台中,您可以像这样运行查询:

select * from names; | column -n -t -s '|'

或者,为了让它更好,在你的某处放置一个脚本$PATH

#!/bin/bash
column -n -t -s '|'

假设它被称为pp,不要忘记使用chmod u+x pp. 然后你可以像这样使用交互式提示:

select * from names; | pp
于 2015-11-11T15:31:51.297 回答
0

我确实在寻找完全相同的问题的解决方案,我发现了这个解决方法:

sqliteresult=`sqlite3 -header -list $SQLITE_FILE "SELECT * ..." | tr "\\n" ";"`
sqliteresult="${sqliteresult/;/;-----------------------------;}"
sqliteresult="${sqliteresult//;/\n}"
sqliteresult="${sqliteresult//|/\t|\t}"
echo -e $sqliteresult

希望它有帮助:)

~斯蒂芬妮

于 2014-10-03T18:41:24.800 回答
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
于 2017-10-23T21:48:11.507 回答