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“|”