从db2导出到csv没有分隔符

时间:2013-04-14 14:46:35

标签: db2 export-to-csv db2-luw

我需要将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    

有办法吗?

3 个答案:

答案 0 :(得分:4)

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

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

无论如何,当使用分隔格式从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()函数来帮助很好地格式化字符串。

答案 1 :(得分: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
    
  3. 这对您有用,因为您需要将varchar转换为char。就像Ian所说,将数字或其他数据类型转换为char可能会带来意想不到的结果。

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

答案 2 :(得分:0)

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

相关问题