oracle外部导入时间戳,从CSV导入到Oracle时间戳

你有一些日期和一些时间戳。这是从具有简单数据完整性的系统导入数据的问题。

您有两种选择:在导入之前清理数据或在导入期间清理数据。

预先清理数据有多种不同的方法。一种选择是使用支持正则表达式的文本处理器或IDE,并执行搜索并替换以修复缺少小数秒的那些值。

导入过程中最简单的清理方式是使用外部表作为中介(而不是SQL Loader)。外部表格是高度整洁的对象,它允许我们像操作数据库一样操作OS文件(如CSV)中的结构化数据。与SQL Loader相比,外部表的一大优点是我们可以在DML语句中使用它们。 Find out more。

为此,您需要将该列的外部表定义为varchar2。您还需要构建一个函数,该函数接受一个字符串并将其转换为时间戳。

create or replace function fix_ts (str in varchar2)

return timestamp

is

is_a_date exception;

pragma exception_init(is_a_date, -1840);

rv timestamp;

begin

begin

rv := to_timestamp(str);

exception

when is_a_date then

rv := to_timestamp(str)||'.000000000';

end;

return rv;

end;

然后,你可以插入记录INT目标表是这样的:

insert into target_table

(id, created, whatever)

select id

, fix_ts(created)

, whatever

from external_table;

如果这是一个一次性的数据清洗运动,那么你可能会更好过在IDE改写(munging)数据。如果这是一个常规的数据馈送,那么值得一段时间来构建一些更加自治和强大的东西。

根据您的评论,还有第三个选项:让源系统在导出过程中修复数据。这可能很容易或很难,取决于许多因素;政治问题往往比技术问题更难以解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值