将结果从 DB2 导出到多列 CSV

问题描述 投票:0回答:1

我需要一些有关 IBM DB2 的帮助。 我的操作系统是基于 Unix (AIX) 的,我直接在控制台上工作(无 GUI)。
我有一个名为“用户”的表。
对于模式,我们只使用“myschema”。 (但是模式是在登录后设置的,所以我不需要再次编写)。

该表有 10 列。我想将表导出为 CSV,但只有 3 列。
然而,无论我使用哪个命令,该死的东西都会将所有内容写入 CSV 列“A”。
所以所有内容最终都在一列(但有几行)中。
如命令所示,我实际上只想导出“userid”、“name”和“description”。
描述可以包含特殊字符,例如“,+.&/”。

我还会导出所有内容,然后删除不必要的列。但如前所述,它将所有内容写入 CSV 的一列中。进入 A 栏。

到目前为止我尝试过的:

db2 "export to users.csv of del select userid,name,description from users"
db2 "export to users.csv of del modified by coldel, select userid,name,description from users"
db2 "export to users.csv of del modified by coldel\t select userid,name,description from users"
db2 "export to users.csv of del modified by NOCHARDEL select userid,name,description from users"

还使用“呼叫”命令,例如

db2 "CALL SYSPROC.ADMIN_CMD('EXPORT TO users.csv OF DEL MODIFIED BY COLDEL, SELECT userid,name,description FROM users')"

我还尝试导出到 users.txt 以及 awk、sed 和 cut。但没有。不起作用。不知道为什么。

db2 -x "select userid,name,description from users" > users.txt

然后

awk '{print $1 "," $2 "," $3}' users.txt > users.csv
or
sed 's/\t/,/g' users.txt > users.csv
or
cut -d ' ' -f 1,2,3 users.txt | tr ' ' ',' > users.csv

我已经无计可施了。我不知道为什么系统会这样做或者我做错了什么。 你能帮我解决这个问题吗?

csv console db2 aix
1个回答
0
投票

使用 shell 进行数据导出时,您应该使用

db2 export
命令,而不是重定向问题中显示的
select
查询的输出。重定向在这里是错误的工具。它不会给出期望的结果。

如果列中的

任何可能包含默认列分隔符(逗号),那么您必须在导出命令行上使用modified by coldel...

(也就是说,您不能使用默认列分隔符)。

如果您正在使用完整的 db2 客户端运行或者在 Db2-LUW 服务器上本地工作,请使用以下选项之一。 首先验证指定的 Coldel 字符没有出现在任何列中(使用查询),在下面的示例中,我显示了插入符号 (0x5e) 或波形符 (0x7e)。

db2 export to users.csv of del modified by coldel0x5e select userid, name,description from users


db2 export to users.csv of del modified by coldel0x7e select userid, name,description from users


导出命令

创建单独的列,由指定的coldel值分隔。 但请注意,在使用这样的 shell 时,Db2 客户端工具(在本例中为 clp)将检查是否需要进行任何代码页转换。这意味着您需要知道数据库代码页,并且需要知道 shell $LANG 的值。如果可能发生代码页转换,则可能会产生意想不到的结果,因此请“绝对”确保通过在导出之前(或在任何后续导入或加载到任何其他 Db2 数据库之前)适当设置 LANG 来尽可能防止此类转换。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.