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 函数:

  • 文件名 = '#DELTA_CSV_DIR#/DELTA.csv'
  • 查询 = '从 temptemp 中选择 ccc'
  • 字符集 = 默认 (UTF-8)
  • 字段分隔符 = '|'
  • fieldDelimiter = ''(空字符串)

如文档所述,默认转义字符是双引号,因此使用双引号对双引号进行转义(与在 Java 字符串中使用反斜杠转义反斜杠的方式相同)。需要转义字符来转义字段分隔符。

您可以按如下方式禁用转义字符:

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

这也为选项使用了更具可读性的新格式。

于 2013-03-16T13:37:03.193 回答