7

コマンドプロンプトを使用してSQLクエリをCSVファイルにスプールしようとしていますが、返されるデータの1つの列のデータにコンマが含まれているため、データが次の列に移動します。これを回避する方法はありますか?理想的には、この特定の列をクエリの最後ではなく途中で返すようにします。

現在、次のコマンドを使用しています。

set termout off;
set colsep ',';
set underline off;
set feedback off;
set pagesize 0;
set linesize 1500;
set trimspool on;

set colsep'、'コマンドが問題であることは知っていますが、何に置き換えるかがわかりません。誰か推奨事項はありますか?

また、SQLクエリの直前に、selectステートメントを使用してヘッダー情報を取得しています。デュアルから「a、b、c」を選択します。それが答えに違いをもたらすかどうかはわかりません。

4

3 に答える 3

7

2つの潜在的な答え。どちらも完璧ではありません。一部の結果にカンマがあり、パイプ ( |) がない場合は、パイプ区切りに切り替えることができます

set colsep '|'

読み取ることができるほとんどのソフトウェアはcsv、その形式で問題なく動作します。

それがうまくいかない場合は、列内のコンマを処理するには、すべてのデータ項目を引用符で囲む必要があることに気付くことができます。

"data 1","data 2","data,with,commas"

これを行うには、各セパレーターが必要","です。

set colsep '","'

これには、各行の最初と最後に引用符がないため、次のようにすべての行を引用符で囲むことができますsed

sed 's/^[^$]*$/"&"/' 
于 2013-03-15T20:22:55.047 に答える
2

次のように選択クエリを変更できます

select REPLACE(column_name, ',',' ') column name from table_name

これにより、列データのコンマ値がスペースに置き換えられます。

于 2014-05-03T22:24:04.260 に答える