web-dev-qa-db-ja.com

SQL Serverから改行を含むフィールドをCSVとしてエクスポートする必要がある

文字列として保存されたHTMLファイルを含むSQL Server Management Studio 2005からのクエリを実行しています。例:

SELECT html 
FROM table 

このクエリは[結果]ウィンドウに適切に表示されます。つまり、各行にはHTMLファイル全体の文字列が含まれ、行ごとに1つのレコードが含まれます。

ただし、「ファイルへの結果」オプションを使用すると、フィールド(つまり、HTML)で改行が発生した場所ではなく、CSVで改行された使用できないCSVとしてエクスポートされます。必要に応じて、行ごとに1つ以上。 「グリッド」と「テキスト」の両方の結果について、クエリ>クエリオプションを試してみましたが、役に立ちませんでした。 CSVにエクスポートされるフィールドしないでくださいは引用符で囲まれているように見えます。

いくつかのアイデア:

  1. SQLに引用符を追加することは可能でしょうか?

  2. 他の方言で可能なWITH CSV HEADERコマンドに相当するT-SQLはありますか?

31
John Horton

Htmlをcsvにエクスポートするのにどれほど成功するかはわかりません。csvの目的ではありません。 HTMLコードをcdata要素で囲むことができるxml形式を使用する方がよいでしょう。

つまり、Replace関数を使用して改行を削除し、手動で引用符を追加することができます。

select '"' + replace (replace (html, char(10), ''), char(13), '') + '"'

HTML値に二重引用符が含まれる可能性がある場合は、二重引用符をエスケープする必要があります。

26
Ray

Visual Studioを使用している場合、 サーバーエクスプローラー は代替ソリューションです。グリッドから結果を正しくコピーして貼り付けることができます。

19

私たちが持っている標準に最も近いもの によると、正しくフォーマットされたCSVファイルは、区切り文字(ほとんどの場合;または,)または改行。

SQL Server Management Studioはそれを行うことができますが、驚くべきことに、このオプションはデフォルトで有効になっていません。有効にするには、ツール→オプション→クエリ結果→グリッドへの結果に移動し、「。csv結果を保存するときにリスト区切り文字を含む引用文字列」をオンにします

17
Zano

私はこれが何歳か知っていますが、私はそれを発見し、他の人もそうかもしれません。 Martijn van Hoofの答えをさらに一歩進めて、キャリッジリターン(13)とラインフィード(10)に加えて、可能なタブ(char(9))を削除することもできます。

SELECT REPLACE(REPLACE(REPLACE(mycolumn, CHAR(9), ''), CHAR(10), ''), CHAR(13), '') as 'mycolumn' FROM mytable
10
RPh_Coder

改行付きの列:「mycolumn」

SELECT REPLACE(REPLACE(mycolumn, CHAR(13), ''), CHAR(10), '') as `mycolumn` FROM mytable

これは改行を置き換えます。

7

私はこれが非常に古い質問であり、現在回答されていることを知っていますが、これも役立つはずです。

 SELECT html
 From table
 For Xml Auto, Elements, Root('doc') 

xmlを吐き出して、そのxmlをExcelにインポートできます

6
Baahubali

これは便利だと思いましたが、フィールドがテキストタイプだったので問題を解決できなかったので、テキストをvarchar(8000)にキャストしました。

REPLACE(REPLACE(CAST([TEXT FIELD] AS VARCHAR(8000)), CHAR(10), ' '), CHAR(13), ' ') AS 'Field Name',
3
Neil

SQL Serverデータのインポートおよびエクスポートツール、FTW!

スタート->プログラム-> Microsoft SQL Server->データのインポートとエクスポート

サンプルクエリ:

select *
from (
select 'Row 1' as [row], 'Commas, commas everywhere,' as [commas], 'line 1
line 2
line 3' as [linebreaks]

union all 

select 'Row 2' as [row], 'Nor any drop to drink,' as [commas], 'line 4
line 5
line 6' as [data]
) a

CSV出力:

"row","commas","linebreaks"
"Row 1","Commas, commas everywhere,","line 1
line 2
line 3"
"Row 2","Nor any drop to drink,","line 4
line 5
line 6"

免責事項:データに二重引用符を付けてクリエイティブにする必要がある場合があります。幸運を!

2
Joe Zamora