我正在尝试使用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有人建议如何解决这个问题吗?
感谢您的建议。
答案 0 :(得分:0)
DB2不会导出带有标头的CSV文件,因为标头将作为数据包含在内。通常,CSV文件用于存储而不是查看。如果要查看带有标题的文件,可以使用以下选项:
答案 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