web-dev-qa-db-ja.com

iSQLからcsvファイルの_with_見出しにデータを出力する方法は?

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

ヒントはありますか?

7
Oliver Jakoubek

私は別のステートメントから始めることを提案したでしょう:

SELECT 'ID;LASTNAME;FIRSTNAME;DOB' FROM dummy;
OUTPUT TO 'C:\\temp\\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '';

クエリにAPPENDオプションを追加します...しかし、APPENDを機能させることができません(ただし、ASA 11エンジンを使用しています)。

10
pascal

これを試してください

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 '';
8
Olzia

オプションを追加するだけです

WITH COLUMN NAMES

ステートメントに追加すると、列名を含むヘッダー行が追加されます。

したがって、完全なステートメントは次のとおりです。

SELECT * FROM SomeTable; OUTPUT TO 'C:\temp\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '' WITH COLUMN NAMES

sybaseのドキュメント を参照してください。

3
eci

あなたはすでにOUTPUTオプションに精通しています。あなたが望むものをあなたに与えるオプションはありません。

問題は、受信側が標準のCSVファイルを受け入れないことです。セミコロンが必要です。

スクリプトを作成している場合は、必要な形式に最も近い形式で出力を取得してから、出力ファイルを起動することをお勧めします。非常に高速で、必要なものは何でも変更できます。最善のオプションはASCIIまたはデフォルトの出力形式で、コンマ(コロンではない)で区切られた値をASCII文字テキストファイルで提供し、列ヘッダー。次に、単一のawkコマンドを使用して、コンマをセミコロンに変換します。

1
PerformanceDBA

FORMAT Excelオプションを使用すると、最初の行に列名が付いた行が出力されます。次に、Excelに取り込むと、必要に応じて別の形式で保存できます。

SELECT * FROM SOMETABLE;
OUTPUT TO 'C:\temp\sometable.xls' FORMAT Excel DELIMITED BY ';' QUOTE ''
1
Jeff Gibson

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"
1
graysonwright
isql -S<Server> -D<Database>-U<UserName> -s \; -P<password>\$\1 -w 10000 -iname.sql > output.csv
1
Sathiyadasan

より簡単な解決策を見つけました。ヘッダーを1つのファイル(header.txtなど)に配置し(1行の "col_1 | col_2 | col_3"が含まれます)、ヘッダーファイルと出力ファイルを組み合わせて実行します。

cat header.txt my_table.txt > my_table_wth_head.txt
0
Zahir Khan