0

我需要将 db2 表的内容导出到 CSV 文件。我读到这nochardel会阻止在每个数据之间使用分隔符,但这并没有发生。

假设我有一张桌子

  MY_TABLE
  -----------------------
  Field_A   varchar(10)
  Field_B   varchar(10)
  Field_A   varchar(10)

我正在使用这个命令

  export to myfile.csv of del modified by nochardel select * from MY_TABLE

我把它写入 myfile.csv

 data1    ,data2    ,data3    

但我不想像下面这样的“,”分隔符

 data1    data2    data3    

有没有办法做到这一点?

4

3 回答 3

4

您在问如何消除逗号分隔值文件,中的逗号 () ?:-)

NOCHARDEL告诉 DB2 不要用字符字段分隔符(默认为双引号字符)包围字符字段(CHAR和字段)。VARCHAR"

无论如何,当使用分隔格式从 DB2 导出时,您必须有某种列分隔符。没有NOCOLDEL分隔文件的选项。

EXPORT实用程序无法写入固定长度(位置)记录 - 您必须通过以下任一方式执行此操作:

  • 自己写程序,
  • 使用单独的实用程序(IBM 销售高性能卸载实用程序)
  • 编写将各个列连接成单个字符串的 SQL 语句:

这是最后一个选项的示例:

export to file.del 
    of del
    modified by nochardel
    select 
       cast(col1 as char(20))   ||
       cast(intcol as char(10)) || 
       cast(deccol as char(30));

最后一个选项可能会很痛苦,因为 DB2 没有sprintf()帮助很好地格式化字符串的函数。

于 2013-04-14T16:10:28.400 回答
0

使用“of asc”而不是“of del”。然后您可以指定固定的列位置而不是定界。

于 2014-07-25T09:29:09.967 回答
0

是的,还有另一种方法可以做到这一点。我总是这样做:

  1. 将 select 语句放入文件(input.sql):

    select 
        cast(col1 as char(20)),
        cast(col2 as char(10)), 
        cast(col3 as char(30));
    
  2. 像这样调用 db2 clp:

    db2 -x -tf input.sql -r result.txt
    

这对您有用,因为您需要将 varchar 转换为 char。正如 Ian 所说,将数字或其他数据类型转换为 char 可能会带来意想不到的结果。

PS:我认为 Ian 指出了 CSV 和固定长度格式之间的区别;-)

于 2014-02-24T16:12:04.903 回答