2013-02-22 115 views
0

我想将我的sql查询迁移到oracle,但似乎我无法转换我的查询,因为DateAdd函数。 STRINGVARIABLE = '1361439468476'DateAdd将查询从sql转换为oracle(sql developer)

输出是:Feb 20,2013

convert (char(12), (dateadd(s, convert(bigint, STRINGVARIABLE)/1000, convert(datetime, '1-1-1970 00:00:00'))), 107) 

回答

1

DATEADD不Oracle中存在。有多种方法处理日期,但这是相当简单:

select date '1970-01-01' + (to_number('1361439468476')/(1000*60*60*24)) 
from dual; 

DATE'1970 
--------- 
21-FEB-13 

...这实际上是21/02/2013 09:37:48,所以不知道为什么你把它作为20-FEB-13

如果你想保持精确到毫秒,你可以使用一个TIMESTAMP代替:

select timestamp '1970-01-01 00:00:00' 
    + numtodsinterval(to_number('1361439468476')/1000, 'SECOND') 
from dual; 

TIMESTAMP'1970-01-0100:00:00'+NUMTODSINTERVAL(TO_NUMBER('1361439468476')/10 
--------------------------------------------------------------------------- 
21-FEB-13 09.37.48.476000000 

我不知道在您的查询的107做虽然,或转换,或许他们正在格式化结果作为一个字符串?


好的,我看到what convert(..., 107) is doing;可等效为:

select to_char(date '1970-01-01' 
    + (to_number('1361439468476')/(1000*60*60*24)), 'Mon DD, YYYY') as dt 
from dual; 

DT 
------------ 
Feb 21, 2013 

...使用to_char()Mon DD, YYYYformat model

+0

作品非常棒!非常感谢! :) – Rogbi 2013-02-22 10:41:23