ISQLクライアントを使用してSybaseASA 8データベースにクエリを実行し、クエリ結果をCSV形式のテキストファイルにエクスポートしようとしています。ただし、列見出しはファイルにエクスポートされません。 iSQL設定でもOUTPUTステートメントでも、それを指定する特別なオプションはありません。
クエリと出力ステートメントは次のようになります。
SELECT * FROM SomeTable;
OUTPUT TO 'C:\temp\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE ''
結果は次のようなファイルになります
1;Miller;Steve;1980-06-28
2;Jones;Martha;1965-11-02
3;Waters;Richard;1979-10-15
欲しいのに
ID;LASTNAME;FIRSTNAME;DOB
1;Miller;Steve;1980-06-28
2;Jones;Martha;1965-11-02
3;Waters;Richard;1979-10-15
ヒントはありますか?
私は別のステートメントから始めることを提案したでしょう:
SELECT 'ID;LASTNAME;FIRSTNAME;DOB' FROM dummy;
OUTPUT TO 'C:\\temp\\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '';
クエリにAPPEND
オプションを追加します...しかし、APPEND
を機能させることができません(ただし、ASA 11エンジンを使用しています)。
これを試してください
SELECT 'ID','LASTNAME','FIRSTNAME','DOB' union
SELECT string(ID),LASTNAME,FIRSTNAME,DOB FROM SomeTable;
OUTPUT TO 'C:\\temp\\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '';
オプションを追加するだけです
WITH COLUMN NAMES
ステートメントに追加すると、列名を含むヘッダー行が追加されます。
したがって、完全なステートメントは次のとおりです。
SELECT * FROM SomeTable; OUTPUT TO 'C:\temp\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '' WITH COLUMN NAMES
sybaseのドキュメント を参照してください。
あなたはすでにOUTPUTオプションに精通しています。あなたが望むものをあなたに与えるオプションはありません。
問題は、受信側が標準のCSVファイルを受け入れないことです。セミコロンが必要です。
スクリプトを作成している場合は、必要な形式に最も近い形式で出力を取得してから、出力ファイルを起動することをお勧めします。非常に高速で、必要なものは何でも変更できます。最善のオプションはASCIIまたはデフォルトの出力形式で、コンマ(コロンではない)で区切られた値をASCII文字テキストファイルで提供し、列ヘッダー。次に、単一のawkコマンドを使用して、コンマをセミコロンに変換します。
FORMAT Excel
オプションを使用すると、最初の行に列名が付いた行が出力されます。次に、Excelに取り込むと、必要に応じて別の形式で保存できます。
SELECT * FROM SOMETABLE;
OUTPUT TO 'C:\temp\sometable.xls' FORMAT Excel DELIMITED BY ';' QUOTE ''
isql
コマンドを使用して、引用されたCSVを出力できます。
$ isql $DATABASE $USERNAME $PASSWORD -b -d, -q -c
select username, fullname from users
結果が得られます:
username,fullname
"jdoe","Jane Doe"
"msmith","Mark Smith"
( manページからコピー )
-b
:非対話型バッチモードでisqlを実行します。このモードでは、isqlは標準入力を処理し、1行に1つのSQLコマンドを想定しています。
-dDELIMITER
:列を区切り文字で区切ります。
-c
:最初の行の列の名前を出力します。 -dまたは-xオプションでのみ効果があります。
-q
:文字フィールドを二重引用符で囲みます。
ただし、クエリ結果に二重引用符が含まれていると、問題が発生する可能性があります。引用符は適切にエスケープされないため、無効なCSVになります。
> select 'string","with"quotes' as quoted_string
quoted_string
"string","with"quotes"
isql -S<Server> -D<Database>-U<UserName> -s \; -P<password>\$\1 -w 10000 -iname.sql > output.csv
より簡単な解決策を見つけました。ヘッダーを1つのファイル(header.txtなど)に配置し(1行の "col_1 | col_2 | col_3"が含まれます)、ヘッダーファイルと出力ファイルを組み合わせて実行します。
cat header.txt my_table.txt > my_table_wth_head.txt