sqlite3正在剪切/剪切/截断我的文本列

sqlite3正在剪切/剪切/截断我的文本列,sql,sqlite,truncate,Sql,Sqlite,Truncate,我有被切断的值,希望显示完整的值 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 an

我有被切断的值,希望显示完整的值

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"
名称将被截断为10个字符或第一行数据的长度,以较长者为准。我怎样才能阻止这种情况发生,而不使列变得比必须的大


谢谢

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

请参阅(在部分中搜索
.width
)。

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

sqlite3 -list -separator "|" -header db.dbs "Select ...." | column -t -s "|"
rlwrap -a -N -c -z pipeto sqlite3 -header locations.dbs
select * from names; | column -n -t -s '|'
select * from names; | pp

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

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

sqliteresult=`sqlite3 -header -list $SQLITE_FILE "SELECT * ..." | tr "\\n" ";"`
sqliteresult="${sqliteresult/;/;-----------------------------;}"
sqliteresult="${sqliteresult//;/\n}"
sqliteresult="${sqliteresult//|/\t|\t}"
echo -e $sqliteresult
希望有帮助:)

~Stéphane

在上展开,可以使用交互式提示并自动设置列宽

除了
column
之外,您还需要(
sudo apt get install rlwrap
如果您在Ubuntu上)。您可以这样运行它:

sqlite3 -list -separator "|" -header db.dbs "Select ...." | column -t -s "|"
rlwrap -a -N -c -z pipeto sqlite3 -header locations.dbs
select * from names; | column -n -t -s '|'
select * from names; | pp
或者,您可以在
.bashrc
或类似文件中添加别名:

alias sqlite="rlwrap -a -N -c -z pipeto sqlite3 -header"
在sqlite控制台中,可以按如下方式运行查询:

sqlite3 -list -separator "|" -header db.dbs "Select ...." | column -t -s "|"
rlwrap -a -N -c -z pipeto sqlite3 -header locations.dbs
select * from names; | column -n -t -s '|'
select * from names; | pp
或者,为了更好,在
$PATH
中的某个地方放一个脚本:

#!/bin/bash
column -n -t -s '|'
假设它被称为
pp
,不要忘记使用
chmod u+xpp
使其可执行。然后您可以像这样使用交互式提示:

sqlite3 -list -separator "|" -header db.dbs "Select ...." | column -t -s "|"
rlwrap -a -N -c -z pipeto sqlite3 -header locations.dbs
select * from names; | column -n -t -s '|'
select * from names; | pp

下面是另一种格式化多个表并以良好格式显示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

我知道。宽度,不想手动设置。我猜有时候答案就是“做不到”。我可能会从一个方法开始,将输出到管道deliminated,它不会截断,然后编写另一个程序来扩展它。参见zuloo的答案。因此,最小的调用应该是:
sqlite3-header my.db“select*from my_table;”column-t-s“|”