sqlite3 обрезает / обрезает / обрезает мои текстовые столбцы - PullRequest
21 голосов
/ 17 ноября 2009

У меня отключены значения, и я хотел бы отобразить полные значения.

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 ]

15 голосов
/ 17 ноября 2009

Похоже, что не существует способа сделать это автоматически, но вы можете использовать команду .width, чтобы вручную указать ширину столбцов.

См. здесь (найдите в разделе .width).

7 голосов
/ 08 декабря 2013

вы могли бы просто использовать столбец (команда unix) следующим образом:

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

-list и -separator могут быть опущены, поскольку они являются значениями по умолчанию

1 голос
/ 11 ноября 2015

Расширяя ответ по zuloo , можно использовать интерактивное приглашение и иметь также автоматическую ширину столбцов.

Помимо column вам также понадобится rlwrap (sudo 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
0 голосов
/ 24 октября 2017

Вот еще один способ отформатировать несколько таблиц и показать 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
0 голосов
/ 03 октября 2014

Я действительно искал решения для той же самой проблемы, и я нашел этот обходной путь:

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

Надеюсь, это поможет:)

~ Stéphane

...