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

时间:2009-11-17 19:29:47

标签: 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 and count(n.timing)<=15"

哪个给了我

name        From State   To State  
----------  -----------  ----------
Jack        Connecticut  Louisiana 
Jeff Danie  New Hampshi  New Hampsh

名称被截断为10个字符或第一行数据的长度,以较长者为准。如何在不使列大于它们的情况下阻止这种情况发生?

由于

5 个答案:

答案 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,还需要rlwrapcolumn)。你这样运行:

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