我需要将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
有办法吗?
答案 0 :(得分:4)
您问的是如何消除逗号分隔值文件中的逗号(,
)? : - )
NOCHARDEL
告诉DB2不要用字符字符分隔符包围字符字段(CHAR
和VARCHAR
字段)(默认为双引号"
字符)
无论如何,当使用分隔格式从DB2导出时,您必须具有某种列分隔符。分隔文件没有NOCOLDEL
选项。
EXPORT
实用程序无法写入固定长度(位置)记录 - 您必须通过以下任一方式执行此操作:
以下是最后一个选项的示例:
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)
是的,有另一种方法可以做到这一点。我总是这样做:
将select语句放入文件(input.sql):
select
cast(col1 as char(20)),
cast(col2 as char(10)),
cast(col3 as char(30));
像这样调用db2 clp:
db2 -x -tf input.sql -r result.txt
这对您有用,因为您需要将varchar转换为char。就像Ian所说,将数字或其他数据类型转换为char可能会带来意想不到的结果。
PS:我认为Ian指出了CSV和固定长度格式之间的区别; - )
答案 2 :(得分:0)
使用“asc”而不是“of del”。然后,您可以指定固定列位置而不是分隔。