やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3ドットコマンド(.separator)

 列、行、それぞれのデリミタを設定する。

成果物

.help

.separator COL ?ROW?     Change the column and row separators

.separator

デフォルト

sqlite3 :memory: \
"select 1, 'A' union select 2, 'B'"
1|A
2|B

列=\t, 行=\n

sqlite3 :memory: \
".separator \"\t\" \"\n\"" \
"select 1, 'A' union select 2, 'B'"
1 A
2  B

 制御コードをシングルクォートすると、文字列としてそのまま出力されてしまう。

sqlite3 :memory: \
".separator '\t' '\n'" \
"select 1, 'A' union select 2, 'B'"
1\tA\n2\tB\n

.showで設定値の確認

sqlite3 :memory: ".show"
        echo: off
         eqp: off
     explain: auto
     headers: off
        mode: list
   nullvalue: ""
      output: stdout
colseparator: "|"
rowseparator: "\n"
       stats: off
       width: 
    filename: :memory:

 絞り込むなら以下。

sqlite3 :memory: ".show" | grep separator
colseparator: "|"
rowseparator: "\n"

 設定して確認。

sqlite3 :memory: \
".separator \"\t\" \"\n\"" \
".show" | grep separator
colseparator: "\t"
rowseparator: "\n"

 改行コードをWindows用にするなら以下。

sqlite3 :memory: \
".separator \"\t\" \"\r\n\"" \
".show" | grep separator
colseparator: "\t"
rowseparator: "\r\n"

.modeとの対応

.mode .separator
.mode list .separator "|", "\n"
.mode csv .separator ",", "\r\n"
.mode tabs .separator "\t", "\n"

list

sqlite3 :memory: ".mode list" ".show" | grep separator
colseparator: "|"
rowseparator: "\n"

csv

sqlite3 :memory: ".mode csv" ".show" | grep separator
colseparator: ","
rowseparator: "\r\n"

 なぜかcsvの改行だけ\r\nおそらく最も一般的な形式ゆえ、最も普及しているOSであるWindowsや、その表計算アプリであるExcelの形式に合わせたのだろう。

tabs

sqlite3 :memory: ".mode tabs" ".show" | grep separator
colseparator: "\t"
rowseparator: "\n"

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで