2016-08-02 235 views
0

我正在尝试导出DB2选择头衔。但是,没有任何成功,我实际的代码是:导出DB2选择为带头文件的CSV

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是整数),当我改变它:

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任何建议如何解决这个问题?

感谢您的咨询。

回答

0

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

  • 导出到IXF文件,但该文件不是平面文件。您将需要一个电子表格来查看它。
  • 导出到一个CSV文件,包括标题是:
    • 从名称的列名,然后执行一个额外的步骤将其添加到该文件。您可以使用describe命令或为此执行syscat.columns上的选择,但此过程是手动的。
    • 执行选择联合,一部分是数据,另一部分是头部。
  • 执行选择并将输出结果输出到文件。不要使用导出。
    • SELECT * FROM myTable的> myTable的
+0

我创建了一个问题要问如何让SQL http://stackoverflow.com/questions/38726949/return-a-row-in-a-db2-function-with-variable-列名量 - 的标量参数 – AngocA

0

忽略的出口,因此只是在有问题的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