如何在Oracle中将时间戳(UTC时间)转化为日期(年月日时分秒)格式

xiaobao929 2010-11-24 05:05:24
在数据导入的时候进行转换
TRAILING NULLCOLS(

EVENT_TIME "TO_DATE('19700101','yyyymmdd') + (:EVENT_TIME)/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24" ,
)”;

这样转换完后显示为年月日,无时分秒
小鸟还知道可以TO_DATE('EVENT_TIME','MM-DD-YYYY hh24:mi:ss')转化为年月日时分秒格式,但这两个语句格式不符,求高手


还有就是如何在导入数据的时候进行追加写的方式
就是说欲导入的表不存在的话就先创建表再导入数据,要是该表存在的话就直接导入数据

十分感谢
...全文
17313 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
零度空间0520 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaobao929 的回复:]

引用 7 楼 fibbery 的回复:
如果你的原始数据是1970-01-01到现在的秒数,你可以使用TO_DATE('19700101','yyyymmdd') + (EVENT_TIME)/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24来将这个秒数转换成date类型,直接将转换的结果保存到数据库就可以了,此时event……
[/Quote]

fibbery 2010-11-26
  • 打赏
  • 举报
回复
如果你的原始数据是1970-01-01到现在的秒数,你可以使用TO_DATE('19700101','yyyymmdd') + (EVENT_TIME)/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24来将这个秒数转换成date类型,直接将转换的结果保存到数据库就可以了,此时event_time是1970年1月1日凌晨到现在的秒数。

如果你的原始数据是timestamp类型,那么,我目前所知道的方法是先使用to_char在使用to_date函数,那么,转换如下:to_date(to_char(event_time,'yyyymmddhh24miss'),'yyyymmddhh24miss'),此时event_time为timestamp类型。

之所以我对你的导入类型感到迷惑,是因为Oracle的timestamp类型并非你所讲的那么简单的从1970年1月1日0晨到现在的秒数。它的计算跟date类型又不一样。

不知道我说的你都清楚了吗?
xiaobao929 2010-11-26
  • 打赏
  • 举报
回复
导入的时候用
EVENT_TIME "TO_DATE('19700101','yyyymmdd') + (:EVENT_TIME)/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24"
成功导入数据库后显示为yyyy-mm-dd
用下列语句
SELECT To_Char(event_time,'yyyy-mm-dd hh24:mi:ss') FROM cdr_data;
则可显示为yyyy-mm-dd hh24:mi:ss,但原表中的EVENT_TIME列仍然是yyyy-mm-dd格式
各位有啥办法将“SELECT To_Char(event_time,'yyyy-mm-dd hh24:mi:ss') FROM cdr_data;
”查询后的数据直接更新原cdr_data表中的EVENT_TIME列吗?
xiaobao929 2010-11-26
  • 打赏
  • 举报
回复
event_time就是UTC时间,就是19700101以后的秒数
导入前是UTC是时间,要求导入后是'YYYY-MM-DD HH24:MI:SS'格式
这些在标题上描述过了……

从正文上能看出该时间是从文件导入的

我认为我描述的很清楚,是你自己压根就没仔细看过……

fibbery 2010-11-26
  • 打赏
  • 举报
回复
呵呵,解决就好。
xiaobao929 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fibbery 的回复:]
如果你的原始数据是1970-01-01到现在的秒数,你可以使用TO_DATE('19700101','yyyymmdd') + (EVENT_TIME)/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24来将这个秒数转换成date类型,直接将转换的结果保存到数据库就可以了,此时event_time是1970年1月1日凌晨到现在的秒……
[/Quote]

你说的没问题,我做的也没问题
有问题的是我用的客户端工具sqldeveloper
无语……
xiaobao929 2010-11-26
  • 打赏
  • 举报
回复
解决……
sqldeveloper工具的问题
严重(#‵′)凸该工具,害老子白白浪费4天的时间
干!!!!!



EVENT_TIME "TO_DATE('19700101','yyyymmdd') + (:EVENT_TIME)/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24" ,
直接导入用PLSQL查看就是'yyyy-mm-dd hh24:mi:ss'的格式,
fibbery 2010-11-25
  • 打赏
  • 举报
回复
你要做什么?倒入数据是指从什么地方导入到什么地方,导入前数据类型是什么,导入的目标数据类型又是什么。

你的描述太乱了。不知道你要干什么。
fibbery 2010-11-25
  • 打赏
  • 举报
回复
你的Event_time是什么类型?
xiaobao929 2010-11-25
  • 打赏
  • 举报
回复
但关键是现在的类型是时间戳
不知如何转化为'2010-11-24 20:18:00'这种格式
fibbery 2010-11-24
  • 打赏
  • 举报
回复
to_date('2010-11-24 20:18:00','YYYY-MM-DD HH24:MI:SS')
这个函数是将字符串转化成date类型的函数,格式串中指定的格式必须是字符串的正确格式。下面的表达式与上面的一致:
to_date('20101124201800','YYYYMMDDHH24MISS')

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧