我正在尝试将我的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)
答案 0 :(得分:1)
DATEADD
。有多种方法可以操作日期,但这很简单:
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, YYYY
format model一起使用。