sqlite3 is chopping/cutting/truncating my text columns

后端 未结 5 1258
太阳男子
太阳男子 2020-12-30 20:47

I have values being cut off and would like to display the full values.

Sqlite3 -column -header locations.dbs \"
select n.namelist, f.state, t.state
from name         


        
相关标签:
5条回答
  • 2020-12-30 20:56

    you could just use column (the unix command) like this:

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

    -list and -separator can be omitted, as they are defaults

    0 讨论(0)
  • 2020-12-30 21:04

    There doesn't appear to be a way to make it automatic, but you can use the .width command to manually specify the column widths.

    See here (search the section for .width).

    0 讨论(0)
  • 2020-12-30 21:19

    I was indeed looking for solutions for the exact same issue and I found this workaround:

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

    Hoping it helps :)

    ~Stéphane

    0 讨论(0)
  • Expanding on the answer by zuloo, it is possible to use the interactive prompt and have automatic column widths too.

    Apart from column you will also need rlwrap (sudo apt-get install rlwrap if you're on Ubuntu). You run it like this:

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

    Or you can put an alias in your .bashrc or similar:

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

    In the sqlite console, you can run your query like this:

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

    Or, to make it nicer, put a script somewhere in your $PATH:

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

    Let's say it's called pp, don't forget to make it executable with chmod u+x pp. Then you can use the interactive prompt like this:

    select * from names; | pp
    
    0 讨论(0)
  • 2020-12-30 21:20

    Here is another way to format several tables and show the rowid in a nice format.

    #/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 讨论(0)
提交回复
热议问题