0

我正在尝试将我的 sql 查询迁移到 oracle,但由于 DateAdd 函数,我似乎无法转换我的查询。 STRINGVARIABLE = '1361439468476'

输出是:Feb 20,2013

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

1 回答 1

1

DATEADDOracle 中不存在。有多种方法可以操纵日期,但这相当简单:

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.

如果要保持毫秒精度,可以使用 aTIMESTAMP代替:

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您的查询在做什么,或者转换,也许他们正在将结果格式化为字符串?


好的,我知道convert(..., 107)在做什么;相当于:

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, YYYY 格式模型一起使用。

于 2013-02-22T10:34:14.137 回答