将DB2选择导出为带有标题的CSV

时间:2016-08-02 14:06:24

标签: csv db2 export

我正在尝试使用headhers导出DB2 select。但是没有任何成功,我的实际代码是:

db2 "EXPORT TO /tmp/result5.csv OF DEL MODIFIED BY NOCHARDEL SELECT 1 as id, 'DEVICE_ID', 'USER_ID' from sysibm.sysdummy1 UNION ALL (SELECT 2 as id, DEVICE_ID, USER_ID FROM MOB_DEVICES) ORDER BY id" 

哪个无效(我建议因为USER_ID是INTEGER),当我更改它时:

db2 "EXPORT TO /tmp/result5.csv OF DEL MODIFIED BY NOCHARDEL SELECT 1 as id, 'DEVICE_ID', 'PUSH_ID' from sysibm.sysdummy1 UNION ALL (SELECT 2 as id, DEVICE_ID, PUSH_ID FROM MOB_DEVICES) ORDER BY id" It works because DEVICE_ID and PUSH_ID is both VARCHAR.

它有效,DEVICE_ID和PUSH_ID都是VARCHAR。

MOB_DEVICE TABLE有人建议如何解决这个问题吗?

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

DB2不会导出带有标头的CSV文件,因为标头将作为数据包含在内。通常,CSV文件用于存储而不是查看。如果要查看带有标题的文件,可以使用以下选项:

  • 导出到IXF文件,但此文件不是平面文件。您需要一个电子表格才能查看。
  • 导出到CSV文件并按以下方式包含标题:
    • 从名称中选择列名称,然后执行额外步骤将其添加到文件中。您可以使用describe命令或在syscat.columns上执行select,但此过程是手动的。
    • 执行选择联合,一部分是数据,另一部分是标题。
  • 执行选择并将输出转换为文件。不要使用出口。
    • 从myTable>中选择* myTable的

答案 1 :(得分:0)

忽略EXPORT,因此只关注有问题的UNION ALL查询:

DB2 SQL希望将不匹配的数据类型的数据整合到数值数据类型中;在这种情况下,进入INTEGER数据类型。因为显而易见,字面值字符串' USER_ID'不是数值的有效表示,该值不能转换为INTEGER值。

但是,可以显式请求反转该转换[SQL希望将字符串转换为数字],以确保SQL遵循所需的效果,将列中的INTEGER值转换为VARCHAR值;即显式强制转换可以确保UNION的公共列之间的数据类型兼容,方法是强制INTEGER列中的值与匹配文本\常量字符串值的数据类型' USER_ID':

with
  mob_devices (DEVICE_ID, USER_ID, PUSH_ID) as 
  ( values( varchar('dev', 1000 ), int( 1 ), varchar('pull', 1000) ) )
( SELECT  1 as id, 'DEVICE_ID', 'USER_ID'
  from sysibm.sysdummy1
)
UNION ALL
( SELECT  2 as id,  DEVICE_ID , cast( USER_ID as varchar(1000) )
  FROM MOB_DEVICES
) 
ORDER BY id