我在Access中有一些表,我正在尝试导出到csv,以便我可以导入到Oracle。我没有通过ODBC使用导出,因为我在其中一些表中有70K - 500K记录,并且该功能会占用,因为我有大约25个表,所以我想导出到csv(这要快得多)然后通过sqlldr加载。
某些数字列可以输出到16位小数,我需要它们。然而,当我出口他们只出去2.我已经做了一些谷歌搜索。区域设置只允许9个小数点(Win XP),通过查询格式化列会将其更改为我导入到Oracle时不需要的文本(也许我可以在控制文件中使用to_number()?)。 / p>
为什么这么难?为什么Access不能直接导出数字列?
答案 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)
创建一个查询,从表中选择所有记录。使用格式化功能格式化麻烦的列:
Select Format(Fieldname,"0000.00000") AS FormattedField
保存此查询并导出查询而不是表格。
这种方法的一个缺点是您的数字字段然后被视为文本,因此您可以获得导出数字的引号,如果您使用选项不将文本括在引号中,那么您导出的任何实际文本字段相同的查询也会丢失报价
另一种(更快,更脏,更笨拙的工作)方法是首先导出到Excel并从那里导出到文本。这使得小数位完好无损,但显然它不是很优雅。