Access 2007导出表到csv decimal

时间:2012-07-10 13:46:11

标签: oracle ms-access decimal

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

某些数字列可以输出到16位小数,我需要它们。然而,当我出口他们只出去2.我已经做了一些谷歌搜索。区域设置只允许9个小数点(Win XP),通过查询格式化列会将其更改为我导入到Oracle时不需要的文本(也许我可以在控制文件中使用to_number()?)。 / p>

为什么这么难?为什么Access不能直接导出数字列?

2 个答案:

答案 0 :(得分:1)

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

以下是我的样本表,其中decimal_field为十进制(18,16)。

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

不幸的是,CSV中引用了导出的decimal_field值:

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

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

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

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

答案 1 :(得分:0)

  1. 创建一个查询,从表中选择所有记录。使用格式化功能格式化麻烦的列:
    Select Format(Fieldname,"0000.00000") AS FormattedField
    保存此查询并导出查询而不是表格。

    这种方法的一个缺点是您的数字字段然后被视为文本,因此您可以获得导出数字的引号,如果您使用选项不将文本括在引号中,那么您导出的任何实际文本字段相同的查询也会丢失报价

  2. 另一种(更快,更脏,更笨拙的工作)方法是首先导出到Excel并从那里导出到文本。这使得小数位完好无损,但显然它不是很优雅。