Sub*_*ike 5 unix oracle datetime date-format epoch
上下文是我们的产品中存在一个现有的应用程序,它生成EPOCH号并将其发送到现有的oracle过程,反之亦然.它使用这样的程序在该过程中工作
SELECT UTC_TO_DATE (1463533832) FROM DUAL
SELECT date_to_utc(creation_date) FROM mytable
Run Code Online (Sandbox Code Playgroud)
当我尝试这些查询时,它对我和Oracle 10g服务器(以及oracle sql developer 4.x,如果这很重要)也有效.
在现有过程中,要求是将值保存为日期本身(时间组件无关紧要),但是在新要求中,我必须将unix EPOCH值转换为datetime(在小时/分钟/秒级别,或者在特定时间更好) oracle查询中的格式如dd-MMM-yyyy hh:mm:ss).奇怪的是,我无法找到有关Google的UTC_TO_DATE和DATE_TO_UTC函数的任何文档.我已经在stackoverflow上查看了所有不同的问题,但是大多数都是特定于编程语言,如php,java等.
底线,如何在Oracle查询中使用这些函数(或任何其他函数)将EPOCH转换为该时间级别?另外,我所指的那些功能可能是定制的或特定的,因为我没有看到任何文档或对此的引用.
tbo*_*one 14
从纪元转换为毫秒(假设纪元是1970年1月1日):
select to_date('19700101', 'YYYYMMDD') + ( 1 / 24 / 60 / 60 / 1000) * 1322629200000
from dual;
Run Code Online (Sandbox Code Playgroud)
11/30/2011 5:00:00 AM
要将该日期转换回毫秒:
select (to_date('11/30/2011 05:00:00', 'MM/DD/YYYY HH24:MI:SS') - to_date('19700101', 'YYYYMMDD')) * 24 * 60 * 60 * 1000
from dual;
Run Code Online (Sandbox Code Playgroud)
1322629200000
如果是秒而不是毫秒,则省略等式的1000部分:
select to_date('19700101', 'YYYYMMDD') + ( 1 / 24 / 60 / 60 ) * 1322629200
from dual;
select (to_date('11/30/2011 05:00:00', 'MM/DD/YYYY HH24:MI:SS') - to_date('19700101', 'YYYYMMDD')) * 24 * 60 * 60
from dual;
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
另一种选择是使用间隔类型:
SELECT TO_TIMESTAMP('1970-01-01 00:00:00.0'
,'YYYY-MM-DD HH24:MI:SS.FF'
) + NUMTODSINTERVAL(1493963084212/1000, 'SECOND')
FROM dual;
Run Code Online (Sandbox Code Playgroud)
它具有不会减少毫秒的优势。
| 归档时间: |
|
| 查看次数: |
45913 次 |
| 最近记录: |