3

我在 Access 中有一些表,我正在尝试导出到 csv,以便可以导入到 Oracle。我不使用通过 ODBC 导出,因为我在其中一些表中有 70K - 500K 记录,并且该功能需要很长时间,因为我有大约 25 个表要做,所以我想导出到 csv(这要快得多)然后通过 sqlldr 加载。

一些数字列可以到小数点后 16 位,我需要它们。但是,当我导出它们时,它们只会出现 2。我已经对此进行了一些谷歌搜索。区域设置只允许输出 9 位小数(Win XP),通过查询格式化列会将其更改为我在导入 Oracle 时不需要的文本(也许我可以在控制文件中使用 to_number() ?)。

为什么这么难?为什么 Access 不能按原样导出数字列?

4

2 回答 2

1

在我的 Access 2007 测试用例中,我没有看到您描述的完全相同的结果。当我导出为 CSV 时,我得到所有小数位。

这是我的示例表,decimal_field十进制 (18, 16)。

id some_text decimal_field
-- --------- ------------------
 1 a         1.0123456789012345
 2 b                          2

不幸的是,这些导出decimal_field的值在 CSV 中被引用:

"id","some_text","decimal_field"
1,"a","1.0123456789012345"
2,"b","2" 

我能找到删除decimal_field值周围引号的唯一方法也删除了围绕真实文本值的引号。

如果引用的数值不可行,也许您可​​以创建一个 VBA 自定义 CSV 导出程序,在其中将值写入您希望格式化的每个文件行。

关于“为什么这么难? ”,我怀疑十进制数据类型是罪魁祸首。我不记得在使用其他数字数据类型时遇到过此类问题。不幸的是,这只是我的猜测,即使它是正确的也无济于事。

于 2012-07-10T18:26:16.753 回答
0
  1. 创建一个查询,从表中选择所有记录。使用 format 函数格式化麻烦的列:
    Select Format(Fieldname,"0000.00000") AS FormattedField
    保存此查询并导出查询而不是表。

    这种方法的一个缺点是您的数字字段随后被视为文本,因此您会在导出的数字周围加上引号,如果您使用不将文本括在引号中的选项,那么您在同一查询中导出的任何实际文本字段也失去他们的报价

  2. 另一种(更快、更脏、更糟糕的工作)方法是先导出到 Excel,然后从那里导出到文本。这会保留小数位不变,但显然它不是很优雅。

于 2012-07-10T17:35:15.320 回答