ラベル mode の投稿を表示しています。 すべての投稿を表示
ラベル mode の投稿を表示しています。 すべての投稿を表示

2022年6月12日日曜日

SQLite3 コマンドラインツール表示で文字列をクォートで囲む(--quote)

概要

.modeコマンドに--quoteオプションを指定することで 文字列がシングルクォートで囲まれた状態で表示される。 数値型と判定された項目はシングルクォートでは囲まれない。

--quoteオプションはバージョン3.38.0より利用可能。

構文


.mode ?mode_name? --quote
                

実行例

  1. クォート付きで表示する

sqlite> .mode box
sqlite> select * from test;
┌────┬──────────────────────────────────────────────────────────────┐
│ id │                            value                             │
├────┼──────────────────────────────────────────────────────────────┤
│ 1  │ Sunday. Monday. Tuesday. Wednesday. Thursday. Friday. Saturd │
│    │ ay.                                                          │
└────┴──────────────────────────────────────────────────────────────┘
sqlite> -- # 1.
sqlite> .mode box --quote
sqlite> select * from test;
┌────┬──────────────────────────────────────────────────────────────┐
│ id │                            value                             │
├────┼──────────────────────────────────────────────────────────────┤
│ 1  │ 'Sunday. Monday. Tuesday. Wednesday. Thursday. Friday. Satur │
│    │ day.'                                                        │
└────┴──────────────────────────────────────────────────────────────┘
                

参考URL

2022年6月5日日曜日

SQLite3 コマンドラインツールの表示に禁則処理を適用する(--wordwrap on)

概要

.modeコマンドに--wrapwrapオプションを指定することで 禁則処理を行うことが出来る。(ただし英語のみ)

--wrapwrapオプションはバージョン3.38.0より利用可能。

構文


.mode ?mode_name? --wordwrap on
.mode ?mode_name? --wordwrap off
                

実行例

  1. 禁則処理を有効にする
  2. 20文字で改行し、禁則処理を有効にする
  3. 元に戻す

sqlite> select * from test;
┌────┬──────────────────────────────────────────────────────────────┐
│ id │                            value                             │
├────┼──────────────────────────────────────────────────────────────┤
│ 1  │ Sunday. Monday. Tuesday. Wednesday. Thursday. Friday. Saturd │
│    │ ay.                                                          │
└────┴──────────────────────────────────────────────────────────────┘
sqlite> -- # 1.
sqlite> .mode box --wordwrap on
sqlite> select * from test;
┌────┬────────────────────────────────────────────────────────┐
│ id │                         value                          │
├────┼────────────────────────────────────────────────────────┤
│ 1  │ Sunday. Monday. Tuesday. Wednesday. Thursday. Friday.  │
│    │ Saturday.                                              │
└────┴────────────────────────────────────────────────────────┘
sqlite> -- # 2.
sqlite> .mode box --wrap 20 --wordwrap on
sqlite> select * from test;
┌────┬──────────────────────┐
│ id │        value         │
├────┼──────────────────────┤
│ 1  │ Sunday. Monday.      │
│    │ Tuesday. Wednesday.  │
│    │ Thursday. Friday.    │
│    │ Saturday.            │
└────┴──────────────────────┘
sqlite> -- # 3.
sqlite> .mode box
sqlite> select * from test;
┌────┬──────────────────────────────────────────────────────────────┐
│ id │                            value                             │
├────┼──────────────────────────────────────────────────────────────┤
│ 1  │ Sunday. Monday. Tuesday. Wednesday. Thursday. Friday. Saturd │
│    │ ay.                                                          │
└────┴──────────────────────────────────────────────────────────────┘
                

日本語には適用されない。

日本語に限らずマルチバイト文字は以下の実行例のように見た目が崩れてしまう。 これは諦めるしかない。


sqlite> select * from test;
┌────┬──────────────────────────────────────────────────────────────┐
│ id │                            value                             │
├────┼──────────────────────────────────────────────────────────────┤
│ 1  │ Sunday. Monday. Tuesday. Wednesday. Thursday. Friday. Saturd │
│    │ ay.                                                          │
├────┼──────────────────────────────────────────────────────────────┤
│ 2  │ 吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。                            │
└────┴──────────────────────────────────────────────────────────────┘
sqlite> .mode box --wordwrap on
sqlite> select * from test;
┌────┬────────────────────────────────────────────────────────┐
│ id │                         value                          │
├────┼────────────────────────────────────────────────────────┤
│ 1  │ Sunday. Monday. Tuesday. Wednesday. Thursday. Friday.  │
│    │ Saturday.                                              │
├────┼────────────────────────────────────────────────────────┤
│ 2  │ 吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。                      │
└────┴────────────────────────────────────────────────────────┘
sqlite> .mode box --wrap 15 --wordwrap on
sqlite> select * from test;
┌────┬─────────────────┐
│ id │      value      │
├────┼─────────────────┤
│ 1  │ Sunday.         │
│    │ Monday.         │
│    │ Tuesday.        │
│    │ Wednesday.      │
│    │ Thursday.       │
│    │ Friday.         │
│    │ Saturday.       │
├────┼─────────────────┤
│ 2  │ 吾輩は猫である。名前はまだ無い │
│    │ 。どこで生れたかとんと見当がつ │
│    │ かぬ。             │
└────┴─────────────────┘
                

参考URL

2022年4月9日土曜日

SQLite3 位置を指定して出力結果を改行する(--wrap)

概要

ひとつのカラムに長いテキスト等が入っていると、 コマンドラインツールでは表示が横に伸びて見づらくなってしまう。

.modeコマンドに--wrapオプションを指定することで カラム内のデータを改行させることができる。

--wrapオプションはバージョン3.38.0より利用可能。

構文


.mode ?mode_name? --wrap N
                

実行例

  1. カラムの幅を10に変更する
  2. カラムの幅を2に変更する
    ヘッダを表示している場合、ヘッダは改行されないので注意する。
  3. デフォルトのカラム幅に戻す

sqlite> -- # 1.
sqlite> .headers on
sqlite> .mode box
sqlite> select * from sample;
┌──────┬───────────┬──────────────────┐
│  id  │   name    │       mail       │
├──────┼───────────┼──────────────────┤
│ 1111 │ name_1111 │ 1111@example.com │
│ 2222 │ name_2222 │ 2222@example.com │
└──────┴───────────┴──────────────────┘

sqlite> -- # 2.
sqlite> .mode box --wrap 10
sqlite> select * from sample;
┌──────┬───────────┬────────────┐
│  id  │   name    │    mail    │
├──────┼───────────┼────────────┤
│ 1111 │ name_1111 │ 1111@examp │
│      │           │ le.com     │
├──────┼───────────┼────────────┤
│ 2222 │ name_2222 │ 2222@examp │
│      │           │ le.com     │
└──────┴───────────┴────────────┘

sqlite> -- # 3.
sqlite> .mode box --wrap 2
sqlite> select * from sample;
┌────┬────┬────┐
│ id │ na │ ma │
├────┼────┼────┤
│ 11 │ na │ 11 │
│ 11 │ me │ 11 │
│    │ _1 │ @e │
│    │ 11 │ xa │
│    │ 1  │ mp │
│    │    │ le │
│    │    │ .c │
│    │    │ om │
├────┼────┼────┤
│ 22 │ na │ 22 │
│ 22 │ me │ 22 │
│    │ _2 │ @e │
│    │ 22 │ xa │
│    │ 2  │ mp │
│    │    │ le │
│    │    │ .c │
│    │    │ om │
└────┴────┴────┘

sqlite> -- # 4.
sqlite> .mode box
sqlite> select * from sample;
┌──────┬───────────┬──────────────────┐
│  id  │   name    │       mail       │
├──────┼───────────┼──────────────────┤
│ 1111 │ name_1111 │ 1111@example.com │
│ 2222 │ name_2222 │ 2222@example.com │
└──────┴───────────┴──────────────────┘
                
「.width」コマンドと組み合わせる

--wrapオプションを使うと全てのカラムの幅が変更されてしまうが、 .width コマンドを使用することでカラム幅をある程度コントロール出来る。


sqlite> .mode box --wrap 5
sqlite> select * from sample;
┌──────┬───────┬───────┐
│  id  │ name  │ mail  │
├──────┼───────┼───────┤
│ 1111 │ name_ │ 1111@ │
│      │ 1111  │ examp │
│      │       │ le.co │
│      │       │ m     │
├──────┼───────┼───────┤
│ 2222 │ name_ │ 2222@ │
│      │ 2222  │ examp │
│      │       │ le.co │
│      │       │ m     │
└──────┴───────┴───────┘

sqlite> .width 4 5 10
sqlite> select * from sample;
┌──────┬───────┬────────────┐
│  id  │ name  │    mail    │
├──────┼───────┼────────────┤
│ 1111 │ name_ │ 1111@examp │
│      │ 1111  │ le.com     │
├──────┼───────┼────────────┤
│ 2222 │ name_ │ 2222@examp │
│      │ 2222  │ le.com     │
└──────┴───────┴────────────┘
                

日本語は ずれてしまう

日本語に限らずマルチバイト文字は以下の実行例のように見た目が崩れてしまう。 これは諦めるしかない。


sqlite> .mode box --wrap 5
sqlite> select * from sample;
┌────┬───────┬───────┐
│ id │ name  │ mail  │
├────┼───────┼───────┤
│ 1  │ test_ │ 1111@ │
│    │ 1111  │ examp │
│    │       │ le.co │
│    │       │ m     │
├────┼───────┼───────┤
│ 2  │ 吾輩は猫で │ 2222@ │
│    │ ある。名前 │ examp │
│    │ はまだない │ le.co │
│    │       │ m     │
└────┴───────┴───────┘
                

参考URL

2021年4月24日土曜日

SQLite3 .mode コマンドの出力サンプル

概要

SQLite 3 のコマンドラインツールはデフォルトの設定だと selectした結果を「|」(パイプ)と改行でつないで表示する。
この出力フォーマットは「.mode」コマンドで変更できる。

デフォルトは「list」

.headers」のON/OFFに関わらずヘッダーが出力されるモードがある。

.mode の出力フォーマット

.mode コマンドのヘルプ

環境
  • Windows 10
  • sqlite3 (3.35.3) Command-Line Shell

出力に関する部分だけ抜粋


.mode MODE ?TABLE?       Set output mode
MODE is one of:
    ascii     Columns/rows delimited by 0x1F and 0x1E
    box       Tables using unicode box-drawing characters
    csv       Comma-separated values
    column    Output in columns.  (See .width)
    html      HTML <table> code
    insert    SQL insert statements for TABLE
    json      Results in a JSON array
    line      One value per line
    list      Values delimited by "|"
    markdown  Markdown table format
    quote     Escape answers as for SQL
    table     ASCII-art table
    tabs      Tab-separated values
    tcl       TCL list elements
                

.mode ascii

アスキーコードで定義されたデータ区切りで表示する。
0x1F(US:ユニット区切り) 0x1E(RS:レコード区切り)
ASCIIコード表 日本工業大学

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode ascii
sqlite> select * from product;
1tomato1002potato120bagging3pumpkin50cuttedsqlite>
                

.mode box

.headers」の設定に関わらずカラム名が表示される。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode box
sqlite> select * from product;
┌────┬─────────┬──────────┬─────────┐
│ id │  name   │ quantity │ remark  │
├────┼─────────┼──────────┼─────────┤
│ 1  │ tomato  │ 100      │         │
│ 2  │ potato  │ 120      │ bagging │
│ 3  │ pumpkin │ 50       │ cutted  │
└────┴─────────┴──────────┴─────────┘
                

.mode csv

CSV形式で出力する。
SQLite 3 CSVデータを取り込む、CSVデータを出力する

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode csv
sqlite> select * from product;
1,tomato,100,""
2,potato,120,bagging
3,pumpkin,50,cutted
                

.mode column

カラムを空白で揃えて表示する。
.headers on」でヘッダーを表示した方が見やすい。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode column
sqlite> .headers on
sqlite> select * from product;
id  name     quantity  remark
--  -------  --------  -------
1   tomato   100
2   potato   120       bagging
3   pumpkin  50        cutted
                

.mode html

htmlのtable要素に貼り付けたい時に使う。
タグ名は大文字になってしまうので、必要があればテキストエディタなどで修正する。

.headers on」にするとカラム名をTHタグで囲んで出力してくれる。

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode html
sqlite> .headers on
sqlite> select * from product;
<TR><TH>id</TH>
<TH>name</TH>
<TH>quantity</TH>
<TH>remark</TH>
</TR>
<TR><TD>1</TD>
<TD>tomato</TD>
<TD>100</TD>
<TD></TD>
</TR>
<TR><TD>2</TD>
<TD>potato</TD>
<TD>120</TD>
<TD>bagging</TD>
</TR>
<TR><TD>3</TD>
<TD>pumpkin</TD>
<TD>50</TD>
<TD>cutted</TD>
</TR>
                

.mode insert

.headers」の設定に関わらず、カラム名が表示される。
SQLite 3 selectの結果からinsert文を作る

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode insert
sqlite> select * from product;
INSERT INTO "table"(id,name,quantity,remark) VALUES(1,'tomato',100,'');
INSERT INTO "table"(id,name,quantity,remark) VALUES(2,'potato',120,'bagging');
INSERT INTO "table"(id,name,quantity,remark) VALUES(3,'pumpkin',50,'cutted');
                

.mode json

.headers」の設定に関わらず、連想配列のフォーマットになる。
SQLite 3 JSON形式でデータを出力する

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode json
sqlite> select * from product;
[{"id":1,"name":"tomato","quantity":100,"remark":""},
{"id":2,"name":"potato","quantity":120,"remark":"bagging"},
{"id":3,"name":"pumpkin","quantity":50,"remark":"cutted"}]
                

.mode line

.headers」の設定に関わらず、カラム名が表示される。

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode line
sqlite> select * from product;
        id = 1
    name = tomato
quantity = 100
    remark =

        id = 2
    name = potato
quantity = 120
    remark = bagging

        id = 3
    name = pumpkin
quantity = 50
    remark = cutted
                

.mode list

デフォルトのモード。


sqlite> .mode list
sqlite> select * from product;
1|tomato|100|
2|potato|120|bagging
3|pumpkin|50|cutted
                

.mode markdown

.headers」の設定に関わらずカラムは表示される。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode markdown
sqlite> select * from product;
| id |  name   | quantity | remark  |
|----|---------|----------|---------|
| 1  | tomato  | 100      |         |
| 2  | potato  | 120      | bagging |
| 3  | pumpkin | 50       | cutted  |
                

.mode quote

文字列をシングルクォートで囲み、データをカンマで区切った表示。
他のSQLに流用したい時に使う。


sqlite> .mode quote
sqlite> select * from product;
1,'tomato',100,''
2,'potato',120,'bagging'
3,'pumpkin',50,'cutted'
                

.mode table

.headers」の設定に関わらずカラムが表示される。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode table
sqlite> select * from product;
+----+---------+----------+---------+
| id |  name   | quantity | remark  |
+----+---------+----------+---------+
| 1  | tomato  | 100      |         |
| 2  | potato  | 120      | bagging |
| 3  | pumpkin | 50       | cutted  |
+----+---------+----------+---------+
                

.mode tabs

タブ区切りで表示する。
SQLite 3 TSVデータを取り込む、TSVデータを出力する


sqlite> .mode tabs
sqlite> select * from product;
1       tomato  100
2       potato  120     bagging
3       pumpkin 50      cutted
                

.mode tcl

TCLのリスト要素として利用できる形式で出力される。


sqlite> .mode tcl
sqlite> select * from product;
"1" "tomato" "100" ""
"2" "potato" "120" "bagging"
"3" "pumpkin" "50" "cutted"
                

参考URL