TO_DATE识别日期

时间:2016-06-16 14:23:30

标签: oracle date

好的,我有这个日期字符串:

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#

1 个答案:

答案 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