2

H2関数を使用して DB のテーブルを CSVにエクスポートしようとしていたところ、列にCSVWRITE二重引用符が含まれていると重複することがわかりました。varchar

例えば。-'hello"howareyou' will be 'hello""howareyou' in the written csv.

この varchar 列をエスケープ文字と他のいくつかの組み合わせで保存しようとしましたが、結果は同じです。

以下は、この問題をテストするために作成した表の列と、取得した結果の CSV 値です。

    My column         CSV written value
    ------------------------------
    hello"how         hello""how
    hello\"how        hello\""how
    hello""how        hello""""how
    hello\""how       hello\""""how
    hello\\"how       hello\\""how
    hello\\\\"how     hello\\\\""how
    hello["]how       hello[""]how
    hello&quote;how   hello&quote;how

以下は私のCSVWriteコマンドです:

    CALL CSVWRITE(
      '#DELTA_CSV_DIR#/DELTA.csv', 
      'SELECT ccc from temptemp', 
      null,  '|',  '');

私はこれを間違っていますか?または、この状況を回避するために使用できるオプションまたは回避策はありますか?

ありがとうございます。

4

1 に答える 1

3

現在、組み込みの CSVWRITE 関数を次のオプションで使用しています。

  • fileName = '#DELTA_CSV_DIR#/DELTA.csv'
  • query = 'temptemp から ccc を選択'
  • 文字セット = デフォルト (UTF-8)
  • fieldSeparator = '|'
  • fieldDelimiter = '' (空の文字列)

文書化されているように、デフォルトのエスケープ文字は二重引用符であるため、二重引用符は二重引用符を使用してエスケープされます (Java 文字列内のバックスラッシュをバックスラッシュでエスケープする必要があるのと同じ方法で)。フィールドセパレーターをエスケープするには、エスケープ文字が必要です。

次のようにエスケープ文字を無効にできます。

CALL CSVWRITE(
  '#DELTA_CSV_DIR#/DELTA.csv', 
  'SELECT ccc from temptemp', 
  'fieldSeparator=| fieldDelimiter= escape=');

これはまた、より読みやすいオプションの新しい形式を使用しています。

于 2013-03-16T13:37:03.193 に答える