好的,我有这个日期字符串:
2016-05-31T23:00:00.000Z
我希望能够使用它来搜索Oracle 12c表中的日期,例如
SELECT stuff
FROM TABLE
WHERE date_column > TO_DATE('2016-05-31T23:00:00.000Z', 'what goes here?');
我无法弄清楚这个日期的格式,有人可以帮忙吗?这可能很简单,但我似乎无法找到它......
编辑:这不是C#
答案 0 :(得分:5)
如果您需要将表示UTC的字符串转换为您当地的时区,那么您需要执行几个步骤。起点是将to_timestamp()
与T和Z的字符文字一起使用,Oracle无法识别:
select to_timestamp('2016-05-31T23:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
from dual;
TO_TIMESTAMP('2016-05-31T23:00:00.000Z','YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
-------------------------------------------------------------------------
2016-05-31 23:00:00.000
然后你可以说明时区较少的值实际上是from_tz()
的UTC:
select from_tz(
to_timestamp('2016-05-31T23:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'),
'UTC')
from dual;
FROM_TZ(TO_TIMESTAMP('2016-05-31T23:00:00.000Z','YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'
--------------------------------------------------------------------------------
2016-05-31 23:00:00.000 UTC
然后您可以将其转换为您自己的时区:
select from_tz(
to_timestamp('2016-05-31T23:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'),
'UTC') at time zone 'Europe/London'
from dual;
FROM_TZ(TO_TIMESTAMP('2016-05-31T23:00:00.000Z','YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'
--------------------------------------------------------------------------------
2016-06-01 00:00:00.000 EUROPE/LONDON
如果您希望将其作为日期数据类型返回,则可以将其强制转换为:
select cast(from_tz(
to_timestamp('2016-05-31T23:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'),
'UTC') at time zone 'Europe/London' as date)
from dual;
CAST(FROM_TZ(TO_TIMESTAMP('2016-05-31T23:00:00.000Z','YYYY-MM-DD"T"HH24:MI:SS.FF
--------------------------------------------------------------------------------
2016-06-01 00:00:00