SQL Loader时间戳到UNIX时间

紫胺

我有一个用于sql loader的工作控制文件,可以在其中以所需的各种格式上载时间戳。

 my_timestamp  TIMESTAMP \"dd-MON-yy hh.mi.ss.ff6 PM\",

但是我想将以毫秒为单位的.csv文件中的时间戳上传到数据库的NUMBER字段中。有什么建议,甚至可能吗?

加里·W

我假设您要剥离毫秒部分并将其分开存储。

未经测试:

...
my_timestamp    TIMESTAMP  "dd-MON-yy hh.mi.ss.ff6 PM"
my_milliseconds NUMBER     "regexp_substr(:my_timestamp, '\.(\d+) ', 1,1,null,1)"
...

但这有效,因此上面的应该起作用:

select regexp_substr('07-JAN-14 04.24.00.123456 PM', '\.(\d+) ', 1,1,null,1) 
from dual; 

返回与一个或多个数字的字符串模式匹配的第一个组(由括号包围),该字符串的模式由左侧的句点和右侧的空格包围。

编辑:哦,您需要将整个时间戳转换为UNIX时间,这是自1970年1月1日0:0:0(纪元)以来的秒数。

首先,您需要公式将日期转换为UNIX时间。稍作谷歌搜索就发现了这一点:

SELECT (cast(to_timestamp('14.03.2010 08:16:22.123456 AM','dd.mm.yyyy hh:mi:ss.FF6 AM')as date) - TO_DATE('01/01/1970 00:00:00', 'MM-DD-YYYY HH24:MI:SS')) *
24 * 60 * 60 
FROM DUAL;

结果为“ 1268554582”。使用纪元转换器将此UNIX时间转换回日期:http : //www.epochconverter.com/验证返回了正确的日期。

那么,如何在控制文件中使用它呢?如果您可以按上述方式选择它,则可以将其放在控制文件中,如下所示:

...
my_timestamp    TIMESTAMP  "dd-MON-yy hh.mi.ss.ff6 PM"
my_unixtime     NUMBER     "(cast(:my_timestamp)as date) - TO_DATE('01/01/1970 00:00:00', 'MM-DD-YYYY HH24:MI:SS')) *
24 * 60 * 60"
...

您可能需要EXPRESSION关键字,但我不确定:

my_unixtime NUMBER  EXPRESSION "(cast(:my_timestamp)as date) - TO_DATE('01/01/1970 00:00:00', 'MM-DD-YYYY HH24:MI:SS')) *
24 * 60 * 60"

现在,它适用于一列,但是如果有很多列,或者您想重用该列,该怎么办?为了实现重用和可维护性,请使用接受时间戳并返回如上所述的unixtime的函数将代码放在一个位置,然后从您的控制文件中调用该函数:

...
my_timestamp    TIMESTAMP  "dd-MON-yy hh.mi.ss.ff6 PM"
my_unixtime     NUMBER     "my_timestamp_to_unix_converter(:my_timestamp)"
...

注意事项:

因为UNIX时间是自1970年1月1日以来的秒数,而不是毫秒,所以损失了毫秒数。如果毫秒对您很重要,则可能需要单独保存它们,如上所示。

到2038年时可能会遇到麻烦:http//en.wikipedia.org/wiki/Year_2038_problem

资源:

http://www.epochconverter.com/

http://orcasoracle.squarespace.com/oracle-rdbms/2009/10/9/converting-timestamp-to-date.html

https://community.oracle.com/thread/1045221

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle时间戳到SQL Server DateTime

来自分类Dev

SQL,从时间戳到相对时间

来自分类Dev

SQL 时间戳到 C# 上的日期时间

来自分类Dev

Rails将UNIX时间戳转换为SQL DateTime

来自分类Dev

未来的SQL时间戳?

来自分类Dev

SQL时间戳-> 1970

来自分类Dev

在 SQL 中如何将时间转换为 UNIX 时间戳

来自分类Dev

仅基于时间的SQL时间戳过滤

来自分类Dev

从 SQL 中的时间戳中提取时间

来自分类Dev

从Unix时间戳到ISO时间戳的时间转换

来自分类Dev

当前时间(PHP)+ SQL时间= AS SQL时间戳

来自分类Dev

从时间戳SQL创建队列

来自分类Dev

Oracle SQL时间戳格式

来自分类Dev

SQL Lite-时间戳

来自分类Dev

PHP和SQL-将Unix时间戳与MySQL CURDATE()比较

来自分类Dev

SQL将日期字符串转换为查询中的Unix时间戳

来自分类Dev

如何在Presto SQL中将unix时间戳转换为日期并从中提取月份

来自分类Dev

在SQL中按天将带有unix时间戳的数据分组

来自分类Dev

将MM / DD / YYYY HH:MM:SS转换为Unix时间戳(SQL)

来自分类Dev

PHP和SQL-将Unix时间戳与MySQL CURDATE()进行比较

来自分类Dev

SQL:如何使用UNIX_TIMESTAMP()将将来的日期转换为时间戳?

来自分类Dev

如何在 sql server 的 UNIX 时间戳中添加一天?

来自分类Dev

PHP - 从秒到毫秒的 unix 时间戳

来自分类Dev

使用JPA中的SQL函数来处理时间戳(GMT到给定的UTC)

来自分类Dev

使用JPA中的SQL函数来处理时间戳(GMT到给定的UTC)

来自分类Dev

查找最接近的时间戳SQL?

来自分类Dev

Oracle SQL中的时间戳转换

来自分类Dev

sql的“时间戳”列是否真的是“ byte []”?

来自分类Dev

将时间戳插入MS SQL