xobQuery version:1.0.1.8613

xobQueryオプション一覧

[-d database_file]

[-i input_file[::sheet_name[::top_left_cell_address[::row_count['x'column_count]]]][/table_name[/A][/X][/R][/C][/N]]]
[-e encoding] [-h] [-t] [-l delimiter_char] [-f fields] [-1] [-a]
[-x file_format] [-s skip_count] [-m max_row_count]

[-o output_file[::sheet_name[/P][::top_left_cell_address[::row_count['x'column_count]]]][/table_name]] 
[-E encoding] [-H] [-L delimiter_char] [-N] [-X file_format] 
[-Z error_message]
[-J setting]

[-q query_string] [-Q query_file] [-c query_file_encoding]
[-p param_name=param_value]
[-r "query_replace_from::query_replace_to"]
[-A]

[-I interrupt_file][/check_count]

([]のオプションは省略可能)

入力に関するオプション

-i input_file

-i input_file[::sheet_name[::top_left_cell_address[::row_count['x'column_count]]]][/table_name[/A][/X][/R][/C][/N]]

input_file

入力ファイルを指定する(ワイルドカード指定可能)
対応ファイルは以下

::sheet_name

対象のシートを指定する(Excel形式のみ有効)
ワイルドカード指定可能。
空または「*」とすると、全てのシートが対象となる。
※ sheet_name は存在しなくてもエラーにならない。存在しない時にエラーとしたい場合には、table_name を指定した上、/R 指定すること。

::top_left_cell_address[::row_count['x’column_count]]

データを取り出す範囲を限定する(Excel形式のみ有効)

例:
-i input.xls::sheet1::B5::10x5

この指定は、input.xls の sheet1 の B5 セルから 10行x5列の範囲を取り出す。
後ろから順に省略が可能で、省略した場合は全部の範囲が対象となる。
また、-i input.xlsのみ指定した場合は、input.xls の全てのシートのA1から UsedRange で認識される全てのデータが対象となる。

/table_name

指定した名前のテーブルにデータを投入する。
input_file がワイルドカード指定の場合は必須。

ワイルドカード指定の場合、該当するファイルの全てのデータを table_name に投入する。
これらのデータは項目の数や構成が異なっている場合、全てのデータの項目を包含したテーブルが作成される。

単一ファイルで、table_name の指定がない場合のテーブル名は以下

-iを複数回指定し、同じ table_name を指定した場合は、指定した input_file のデータ項目を全て包含したテーブルが作成され、全てのデータを投入する。

テーブルの項目名は入力フィあるから得た名前を全て小文字にして作成される。
※大文字小文字を保つ場合は/Cオプションを指定する。
1行の入力データに同一名称の項目が複数ある場合は、最後に読み込んだ値が採用される。

※input_file は存在しなくてもエラーにならない。存在しない時にエラーとしたい場合には、table_name を指定した上、/R 指定すること。

/A

データを投入する前にテーブルを削除せず、レコードを追加する。
データベースファイルを指定する場合で、一度の実行の後、同じテーブルにデータを追加したい時に指定する。このとき、既存のテーブルに無い項目を持つデータを指定するとエラーとなる。
同一テーブル名を複数回指定した場合、うち一つでもこの指定があれば、全てに指定したのと同一の効果となる。

/X

入力元の制御情報(ロード元のファイル名や行番号)を記録しないでテーブルを作成する。
制御情報は、通常のクエリでは取り出されないが、項目に別名をつけることで取り出せる。
ただ、この場合、SELECT DISTINCT * を行っても、入力元行番号の影響で、期待の結果は得られない。これを抑制するための指定。
同一テーブル名を複数回指定した場合、うち一つでもこの指定があれば、全てに指定したのと同一の効果となる。

/R

テーブルが作られない時にはエラーとする。
テーブルが作られない原因は、入力のファイルがないか、レコードがない場合となる。
同一テーブル名を複数回指定した場合、うち一つでもこの指定があれば、全てに指定したのと同一の効果となる。

/C

入力データから項目名を作成するとき、大文字小文字を保持する。
ひとつの -i オプションで指定した入力データ(複数あり)内に、同一名称(大文字小文字区別せず)の項目が複数ある場合は、最後に読んだ項目名が列名となる。(1ファイルであれば、1行内の後ろの項目。入力が抽出データ形式(xml,xbd)ならば、より後ろの行でかつ1行内で後ろの項目。複数のファイルであれば、より後に読んだファイルでの最も後ろの項目。複数のファイルは、ファイル名の昇順に処理する。)
同一テーブル名を複数回指定した場合、うち一つでもこの指定があれば、全てに指定したのと同一の効果となる。

/N

読み込んだ行の列がテーブルの列に対して足りないときに、その列にはNULL値が挿入される。
これにより、「入力データ中に項目があるが値が空」と、「入力データ中に項目自体が無い」を区別することが可能となる。
既定では、これは区別なく、テーブルには空文字列が入る。

-e encoding

入力ファイルの文字コード(SJIS, EUC, JIS, UTF8, UTF16のどれか) を指定する。
入力が CSV ファイルの時のみ有効。
省略時は SJIS とみなす。

-h

データの1行目の値を項目名として使用することを指定する。指定がない場合、項目名は item1, item2,…のようになる。
入力が CSV、Excelファイルの時のみ有効。
指定があっても空の場合は、item1 … の名前をつける。
項目の値の前後の空白は取り除かれる。また、大文字小文字の区別はつけず、半角英字は小文字となる。

-t

データ項目の前後の空白を取り除く。

-l delimiter_char

項目を区切っている文字を指定する。
入力が CSV ファイルの時のみ有効。

-f fields

-f 1 1番目の項目
-f 1,2 1 と 2
-f 1-3 1 から 3

-1

項目を区切らずに改行毎に1項目として扱う。入力が CSV ファイルの時のみ有効。
-l の指定と重複した場合、こちらが優先される。引用符はデータとして扱う。
例えば、“aaa”,“bbb”,“ccc” の行は、このままの形で登録される。

-x file_format

file_format には、XLS|XBD|XBD1|CSV|EXCEL のいずれかが指定できる。
入力ファイルの拡張子に関わらず、指定の形式として扱う。このため、読み込めない場合がある。
ファイルをワイルドカードで指定した時にこの指定をすると、全てのファイルを指定の形式として扱う。
また、この他の入力に関するオプションは、ここで指定を行った場合適宜有効となる。(たとえば、CSVファイルにのみ有効なオプションなど)

XBD1指定:

通常、XBD形式のファイルは、すべての行(ROWSタグ)を走査して項目を列挙するため、その他の形式に比べて低速となる。対象のデータの各行が同じ項目である事が明らかな場合は、この指定をすることによって、最初のROWSタグのみを項目列挙に使用する。
skip_count が指定されている場合は、項目列挙に使用するのは、指定した数の読み飛ばしを行ってから、最初のROWSタグ内の項目となる。

EXCEL指定:

通常、Excel形式のファイルは、MS Excelを使用せずに読み込みを行う(XLS指定のときも)が、EXCEL 指定をした時は、MS Excel を使って読み込む。
これは、非常に低速になるが、通常の処理ではうまく読めないデータがある場合に使用する。

-s skip_count

読み飛ばす行数を指定する。入力ファイルの種類により次のように動作する。

-m max_row_count

最大で読む行数を指定する。入力ファイルの種類により次のように動作する。

-a

テーブル列名に使用できない文字が含まれているために、入力データから列名が生成できない場合、エラーとせずに、エラーの原因となる文字を除去して名前をつける場合に指定する。この結果、元々エラーでなかった他の列と同一名となる場合は連番を付加する。
なお、入力データの列名に相当するものが空の場合は、このオプションが指定されていなくても、自動生成する。

出力に関するオプション

-o output_file

-o output_file [::sheet_name[::top_left_cell_address[::row_count['x'column_count]]]][/table_name]

output_file

クエリの結果を出力する出力ファイル。
クエリ、table_name 共に指定が無い時は無視される。
table_name 指定があるとき、クエリ指定は無視される。ファイル名に “?” を含む場合には、その文字をクエリの出力列名のうち、"file_label"という名前の列の値で置換して出力する(結果、出力ファイルが複数となる場合がある)。
この時、file_label の値がファイル名として不正な文字を含むとエラーになる。file_label の値はデータ中に出力されない。

次の形式で出力可能(ファイルの拡張子で判断)

::sheet_name

sheet_name に “?” を含む場合には、? 文字をクエリの出力列名のうち、"sheet_label"という名前の列の値で置換して出力する(結果、出力シートが複数となる場合がある)。
Excel形式の場合は ::sheet_name の指定が必須。Excel形式以外の場合、::sheet_name 指定は無視する。
結果的にシート名が不正となる場合(使用できない文字が含まれる場合など)は、エラーになる。

/P

指定がある場合、指定したシートが存在しないときは無視する。
指定のないときは、シートが存在しなければ作成する。

::top_left_cell_address[::row_count['x’column_count]]

Excel形式の場合は データを出力する範囲を限定できる。
指定の無い場合は、A1セルからデータのある分だけ出力する。

例:

-o output.xls::sheet1::B5::10x5

この指定は、output.xls の sheet1 の B5 セルから 10行x5列の範囲にデータを出力する。
出力のデータがこの範囲に収まらない場合は、それらのデータは切り捨てられる。
出力データがこの範囲に満たない場合は、そのまま出力する。
※ クエリの列名による、セルのアドレス指定での出力列名が “cell_label_” で始まる列は、以降をセルのアドレスとして扱い、常にその場所へ出力します。

例えば、次のようなクエリの場合

SELECT
	社名     cell_label_C10,
	住所     cell_label_E15,
	明細ID,
	品名,
	金額
FROM TABLE_A

社名は常に C10セル、住所は常に E15 に上書き出力され、その他
の列(明細ID、品名、金額)は、一覧出力されます。

/table_name

指定した名前のテーブルの全件を出力する。この指定は、クエリ指定よりも優先される。

-E encoding

出力ファイルの文字コード(SJIS, EUC,JIS,UTF8, UTF16のどれか) を指定する。省略時は SJIS とみなす。
出力が CSV ファイルの時のみ有効。

-H

1行目に項目名を出力する。
出力が CSV、Excelファイルの時のみ有効。

-L delimiter_char

項目を区切る文字を指定する。
出力が CSV ファイルの時のみ有効。

-N

項目をダブルクオーテーションで囲まない時には指定する。
出力が CSV ファイルの時のみ有効。

-X file_format

file_format には、XLS|XBD|CSV|EXCEL のいずれかが指定できる。
出力ファイルの拡張子に関わらず、指定の形式として扱う。
また、この他の出力に関するオプションは、ここで指定を行った場合適宜有効と
なる(たとえば、CSVファイルにのみ有効なオプションなど)。

EXCEL指定:

通常、Excel形式のファイルは、MS Excelを使用せずに出力を行う(XLS指定のときも)が、EXCEL 指定をした時は、MS Excel を使って出力する。
これは、非常に低速になるが、通常の処理ではうまく出力できないデータがある場合に使用する

-Z error_message

クエリ結果が0件のとき、error_message を出力して警告終了するには指定する。
クエリ、および出力ファイルの指定が無い時にはこの指定は無視される。

-J setting

<内部使用のためのオプションで、通常使用できません>
レポート作成設定の JSON 文字列、または設定ファイル名を指定する。
指定の値のファイルがあれば、設定ファイル名と解釈し、そうでなければ JSON 文字列として解釈する。いずれも正しい設定として読み込めなければエラー。

この指定があると、次の指定は無視する。
-o オプションのファイル名以外のすべての指定
-E -H -L -N の指定
-X の EXCEL 以外の指定

クエリに関するオプション

-q query_string

データベースからデータを出力するときのクエリ文字列。
-Q といずれも指定がなければ、データの取り出しは行わない。
クエリの指定があり、-o (出力ファイル)の指定がなければ、データを取得しないクエリ(UPDATE句など)とみなし実行する。

※クエリにエラーがある場合、警告終了となる。異常終了としないのは、投入データの内容によって、対象テーブルがない場合などと、本当の文法エラーの区別が判断できないため。
これは、エラーメッセージから人によって判断が必要となる。

※出力をXMLファイル(抽出データ形式)にする場合には、取得した項目名はXMLのタグとして利用できるルールに準じている必要がある。

※SELECTクエリの時は、複数のクエリを指定しても、最初のクエリの結果のみ取得される。SELECTでない場合は、「;(セミコロン)」で区切ることより、複数のクエリを一度に実行できる。

※クエリに使えるSQLの文法は、SQLite で解釈できるものに準じており、後述する拡張関数を使用できる。

-Q query_file

クエリ文字列が記載されたファイル。-q と同時に指定した場合、こちらが優先される。

-c encoding

クエリファイルの文字コード(SJIS, EUC, JIS, UTF8, UTF16のどれか)を指定する。
省略時は SJIS とみなす。

-A

データベースに対して、トランザクションを開始せずにクエリを実行する。
トランザクション内で実行出来ない、管理コマンドなどの実行用。

-p param_name=param_value

クエリ内に、@param_name の形式で記述したパラメータに対して、param_value で与えた値を割り当てる。

例:SELECT * FROM table where name = @myname に値「sanpei」を割り当てるには、
-p myname=sanpei などとする。

これはいわゆる「パラメータクエリ」なので、通常 WHERE句の条件の値を変更した
り、INSERT 文の値を変更するのに使うが、SELECT の対象テーブル名を変更したり
はでできない。このような用途には、-r を使うこと。

-r “query_replace_from::query_replace_to”

クエリ文字列内の query_replace_from を query_replace_to に置換する。
パラメータとして使用できないような置換を行うために使う。クエリ文字列の指定が無い時は、無視される。
パラメータクエリの指定と同時に指定される場合、パラメータの設定よりも前に、置換処理が行われる点に注意のこと。
複数指定することができるが、query_replace_from が同一の場合、より後ろで設定した内容が優先される。
また、置換処理は指定した順番にクエリ全体に対して行われるので、前の置換の結果に対して後続の置換が行われる点も注意のこと。

クエリに使える拡張関数

EX_ROUNDINT(数値)

値の小数点以下を四捨五入する。値が数値でないときは0。

EX_REGMATCH(正規表現パターン, 調べる文字列値)

文字列値が指定した正規表現にマッチすれば true。

EX_REGREPLACE(元の文字列値, 正規表現のパターン文字列, 置換する文字列値)

文字列値のうち、パターン文字列に合致する部分を、指定した文字列で置換する。

EX_TOZENKAKU(値)

値を全角に変換する。

EX_TOHANKAKU(値)

値を半角に変換する。

EX_FORMAT(書式文字列, 値,…)

指定した書式で値を変換する。この書式は、.NETの string.Format の書式指定文字列と同等。

EX_PATH_COMBINE(パス文字列値1, パス文字列値2)

パス文字列を連結する。

EX_PATH_GETDIR(パス文字列値)

パス文字列値から、ディレクトリ部分を抜き出す。

EX_PATH_GETFILENAME(パス文字列値, 拡張子の有無)

パス文字列値から、ファイル名の部分を抜き出す。拡張子の有無:0-拡張子を含む、1-拡張子を除く。

EX_PATH_GETEXTENSION(パス文字列値)

パス文字列値から、拡張子の部分を抜き出す。
例:‘abc.txt’ → ‘.txt’ を得る。

EX_FORMULA(数式文字列, 値…)

Excel準互換の数式の結果を得る。値を指定したときは、これを EX_FORMAT と同等の書式文字列と扱って、変換した結果の数式文字列を評価する。

EX_DATETOSTR(値, [書式指定文字列])

Excel の日付シリアル値を、日付の文字列に変換する。EX_FORMAT と同じ書式指定が可能。

EX_DATECALC(値, [値を日付に変換にする書式], [年の加算値], [月の加算値],[日の加算値], [計算結果を文字列にするときの書式])

値を、指定した書式の日付として扱い、年、月、日の加算を行って、指定の書
式で出力する。

例:

SELECT 
EX_DATECALC(日付の列名, 'yyyy/M/d', 1, 1, 1, 'yyyy-MM-dd')
FROM TBL

‘yyyy/M/d’ 形式で格納されている日付の列の値の、1年と1ヶ月と1日後を求め、‘yyyy-MM-dd’ の形式で出力します。
加算値は、マイナス値も指定可能。
年を加算 → 月を加算 → 日を加算の順に個別に処理されます。
書式には .NET のカスタム日付書式文字列が指定できます。和暦には対応
していません。

EX_GROUP_CONCAT(連結する値, セパレータ文字列, 最大連結数, IsDistinct, IgnoreEmpty, FillEmpty)

複数行の値を1項目に連結する。

例:

    GRP  | MNO | NAME
    -----+-----+------------------------
    001  | 1   | 名前A
    001  | 2   | 名前B
    001  | 3   | 名前C
    002  | 1   | 名前D
    002  | 2   | 名前E
    003  | 1   | 名前F

このようなデータ(tbl)を

SELECT GRP, EX_GROUP_CONCAT(NAME, ',', 0, 0, 0, 0) FROM tbl GROUP BY GRP

とすると、

GRP  | EX_GROUP_CONCAT(NAME, ',', 0, 0, 0, 0)
-----+------------------------------
001  | 名前A,名前B,名前C
002  | 名前D,名前E
003  | 名前F

が得られる。

セパレータ文字列:値を連結する際に指定する区切り文字列

最大連結数:1 以上の整数を指定すると、連結する要素の数を制限する。

その他のオプション

-I interrupt_file[/check_count]

指定があれば、実行時にこのファイルを作成する。
処理中にこのファイルが削除されたら、処理を中断して終了する。
ファイルがすでに存在する場合もエラーとならない。
check_count は、中断のチェックを行うレコードの間隔を示す。既定値は10000。
この値が大きいほど、中断チェックを行う処理が、本来の処理に与える影響は小さい。

退出コード

オプションの指定の例

1-1. 抽出データ XML ファイルを入力

aaa.xml を読んで、項目 xxx が空でないもののみを bbb.xml に出力

-i aaa.xml -o bbb.xml -q "select * from aaa where xxx is not null"

aaa.xml を読んで、query.sql で記述したクエリを実行して、結果を bbb.xmlに出力

-i aaa.xml -o bbb.xml -Q query.sql

aaa.xml を読んで、TABLE_A という名前のテーブルを作成して投入し、query.sql で記述したクエリを実行して、結果を bbb.xml に出力

-i aaa.xml/TABLE_A -o bbb.xml -Q query.sql

aaa.xml を読んで、TABLE_A という名前のテーブルを作成して投入し、クエリを指定せずに、全件を取り出す

(この例は無意味ですが、XML→CSVなど形式を変換したいときに使います)

-i aaa.xml/TABLE_A -o bbb.xml/TABLE_A

項目の異なる aaa.xml, ddd.xml を共に TABLE_A に投入し、クエリで取り出す

-i aaa.xml/TABLE_A -i ddd.xml/TABLE_A -o bbb.xml -Q query.sql

このとき、TABLE_A は全ての入力 xml の項目をもったものになります。

ワイルドカードで指定して、query.sql で記述したクエリを実行して、結果を bbb.xml に出力

-i *.xml -o bbb.xml -Q query.sql

各 xml は項目が異なっていても構いません。
DBに作成されるテーブルは、全ての入力 xml の項目をもったものになります。
テーブル名は、最初に *.xml にマッチしたファイル名から拡張子を抜いたものになります。

上と同様ですが、DBのテーブル名を明示的に指定しています。全てのデータが TABLE_A に入ります。

-i *.xml/TABLE_A -o bbb.xml -Q query.sql

一回目の実行で作成したデータベースをとっておいて、二回目の実行で、一回目で作成した TABLE_A にデータを追加します

-i aaa.xml/TABLE_A   -d work.db (一回目の実行)
-i ccc.xml/TABLE_A/A -d work.db (二回目の実行)

-d でデータベースファイル名を指定します。ファイルがなくても作成されます。
この場合は、aaa.xml, ccc.xml は同じ項目を持っていなくてはなりません。

データの投入のみを行います

-i aaa.xml/TABLE_A -d work.db

既存の work.db ファイルからデータの取り出しのみ行います

-d work.db -o bbb.xml -Q query.sql

データの取り出し以外のクエリを実行します(このとき出力ファイルを指定すると、動作しません)

-d work.db -q "DELETE FROM TABLEXXX"

クエリファイル内に可変の変数を使い、外から値を与えて実行します

-i aaa.xml -o xxx.xml -Q query.sql -p param1=AAAAA -p param2=BBBBB

クエリファイルには次のように記述していて、

SELECT * FROM mytable 
WHERE nendo = @param1
and   month = @param2

@に続く変数に、値を与えて実行します。
このような変数は、全ての文言に使えるわけではありません。例えば、

@param1 * FROM mytable

として、param1 に “SELECT” を与えるようなことはできません。

-q と -Q を同時に指定したら??

-Q が優先されます。

UTF8 のクエリファイルを使いたい

-d work.db -o bbb.xml -Q query.sql -c UTF8

aaa.xml の 「name」 というタグを、「名前」 に変更したい

-i aaa.xml -o bbb.xml -q "select name 名前 from aaa"

売上と商品の xml を、マッチングさせて出力したい

-i 売上.xml -i 商品.xml -o bbb.xml -Q query.sql

query.sql は例えば、

SELECT
	 s.商品名 商品名  ← (別名を付けないと「s.商品名」と出力されます)
	,u.金額   金額
FROM 売上 u INNER JOIN 商品 s
ON u.商品コード = s.商品コード

など・・

売上と商品の xml で、“商品にない” 商品コードをもつ売上データを出力したい

-i 売上.xml -i 商品.xml -o bbb.xml -Q query.sql

query.sql は例えば、

SELECT
	 u.商品コード   マスタにない商品コード
	,s.商品コード
	,u.金額         金額
FROM 売上 u LEFT OUTER JOIN 商品 s
ON u.商品コード = s.商品コード
WHERE s.商品コード is null

など・・

aaa.xml を並べ替えたい

-i aaa.xml -o bbb.xml -q "SELECT * FROM aaa ORDER BY 金額"

aaa.xml を csv にしたい

-i aaa.xml -o bbb.csv/aaa

または

-i aaa.xml -o bbb.csv -q "SELECT * FROM aaa"

aaa.xml の中に、「店名」があり、店名毎に別々のファイルを作成したい

-i aaa.xml -o 売上_?.xml -Q query.sql

query.sql は

SELECT
	 店名 file_label ← この名前のカラムの値は、出力ファイルの "?" の場所に埋め込まれる
	,売上金額
FROM aaa

とすると、

売上_東京.xml
売上_大阪.xml
....

のようにファイルができる。

1-2. CSV ファイルを入力

bbb.csv を xml にする

-i bbb.csv -o aaa.xml/bbb

または

-i bbb.csv -o aaa.xml -q "select * from bbb"

※ クエリでは、テーブル、カラム、SELECT等のキーワードは大文字小文字を区別しません。

csv を全部まとめて xml にする(全ての csv が allcsv テーブルに入る)

-i *.csv/allcsv -o aaa.xml/allcsv

csv の一行目は項目名になっている

-i bbb.csv -h -o aaa.xml/bbb

csv を全部まとめて xml にするが、各項目は異なっている

-i *.csv/allcsv -h -o aaa.xml/allcsv

※ 例えば、

csv-A
	ID,名前,性別
	1,太郎,男
	2,花子,女

csv-B
	ID,生年月日,社員番号
	2,19900101,0808
	3,19951220,0900

が、allcsv テーブルとして

ID,名前,性別,生年月日,社員番号
1,太郎,男,,
2,花子,女,,
2,,,19900101,0808
3,,,19951220,0900

と入る。

bbb.csv の特定の項目(1,3,8~10,20以降最後まで)のみを xml にする

-i bbb.csv -f 1,3,8-10,20- -o aaa.xml/bbb

! 区切りで、UTF8 の csv を読む

-i bbb.csv -e UTF8 -l ! -o aaa.xml/bbb

1-3. Excel ファイルを入力

特定のexcel シートを読み込む

-i aaa.xls::sheet1

このとき、テーブル名は、ファイル名と同じ aaa になります。

全部のシートを読み込む

-i aaa.xls

全てのシートが同一テーブルに入ります。このとき項目はすべてのシートの項目を含んだものになります。

1行目を項目名にする

-i aaa.xls::sheet1 -h

C3セルを左上として読み込み、1行目を項目名にする

-i aaa.xls::sheet1::C3 -h

C3セルを左上として、10行x5列だけ読み込み、そのうちの1行目を項目名にする

-i aaa.xls::sheet1::C3::10x5 -h

C3セルを左上として、特定の列(1,2,3,7)だけ読み込む

-i aaa.xls::sheet1::C3 -f 1-3,7

↓このようにした場合、-f の指定は無視されます。(列数の指定をされているため)

-i aaa.xls::sheet1::C3::10x5 -h -f 1-3

C3セルを左上として、特定の列と、行数を指定して読み込む

-i aaa.xls::sheet1::C3::10 -f 1-3,7

Excel と CSV と xml を読んで、同じテーブルに投入

-f 1-3,7 -h(続く)
-i aaa.xls::sheet1::C3::10x5/TABLE_A	(続く)	← -f指定は効きません
-i aaa.xls::sheet2::B5::20x8/TABLE_A	(続く)	← -f指定は効きません
-i bbb.xls/TABLE_A						(続く)	← -f指定が効きます
												(全てのシートを読みます)
-i ccc.xls::sheet_*::E1::5x5/TABLE_A	(続く)	← -f指定は効きません
-i ddd.csv/TABLE_A						(続く)	← -f指定が効きます
-i eee.xml/TABLE_A								← -f指定は効きません
												(そもそもXMLには効かない)

このとき TABLE_A には、CSV, Excelの対象の領域の一行目の項目と、xml の項目の全てを含んだ列ができます。

一行目を項目名として使い、項目番号を指定した時

aaa.csv
	あ,い,う
	aaa,bbb,ccc

bbb.csv
	い,う,え
	vvv,xxx,zzz

というファイルを、

-i aaa.csv/TABLE_A -b bbb.csv/TABLE_A -f 2,3

で読み込むと、TABLE_A は

bbb ccc
xxx zzz

というデータになります。

2-1. Excel を出力する

TABLE_A のデータを全て、Excel の Sheet1 に出力する

-o out.xls::sheet1/TABLE_A

クエリの結果を Excel の Sheet1 に出力する

-o out.xls::sheet1 -q "SELECT * FROM TABLE_A"

クエリの結果の値をファイル名の一部にして、複数のExcelファイルのSheet1 に出力する

-o out_?.xls::sheet1 -q "SELECT *, name file_label FROM TABLE_A"
       ↑                                   ↑
     file_label の値で置換する         ファイル名の一部にしたい値に
     位置に "?" を記述する             file_label という列名をつける

クエリの結果の値をシート名の一部にして、Excelファイルの複数のシートに出力する

-o out.xls::sheet_? -q "SELECT *, name sheet_label FROM TABLE_A"
                  ↑                      ↑
       sheet_label の値で置換する        ファイル名の一部にしたい値に
       位置に "?" を記述する             sheet_label という列名をつける

クエリの結果の値をC5セルを左上にして出力し、また name 列の値は、B3 セルに出力する

-o out.xls::sheet1::C5 -q "SELECT name cell_label_B3, meisai FROM TABLE_A"
                                                  ↑
                                        出力するセルの位置を指定する

クエリの結果の値をC5セルを左上にして、最大 10 行 x 5 列で出力する

-o out.xls::sheet1::C5::10x5 -q "SELECT * FROM TABLE_A"

【クエリTips】

売上の上位10レコードを抽出したい

select
	 店
	,売上
from 売上データ
order by cast(売上 as int) desc
limit 10

※ 売上は文字列なので、cast しないと正しく並べ替えられません。

売上の上位11位~20位を抽出したい

select
	 店
	,売上
from 売上データ
order by cast(売上 as int) desc
limit 10
offset 10

元のファイル名や、行番号の情報を取得したい

select
	 x.path
	,x.filename
	,x.ext
	,x.sheetname
	,t.__xob_row 行番号
	,t.*
from t inner join __xob_finfo x
on t.__xob_finfo_rowid = x.rowid

__xob_finfo テーブルはシステムテーブルで、処理を行うと必ず作成されます。
また、各テーブルには、以下のシステム列があります。

__xob_row 元のファイルの行番号
__xob_finfo_rowid ファイル情報テーブルの rowid

クエリで select * をした場合、列が __xob で始まる場合は出力されません。
出力したい場合は、__xob 列に別名をつけます。