【问题标题】:TO_DATE Recognise dateTO_DATE 识别日期
【发布时间】:2016-06-16 14:23:29
【问题描述】:

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

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#

【问题讨论】:

  • 你需要时间部分吗?
  • 是的,我需要时间部分。
  • @RickRunowski 那是C# 这个问题标签是Oracle
  • Possible duplicate,如果需要将时间从UTC('Z')调整为本地时间。如果小数部分始终为 .000,您也可以使用 TO_DATE(),也可以将其视为文字。
  • @RickRunowski 这似乎在 c# 中

标签: oracle date


【解决方案1】:

如果您需要将表示 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                                                             

【讨论】:

  • 这看起来可以解决问题 - 看起来很复杂,但感谢您抽出宝贵时间。我刚刚发现 Bash 更宽容,所以我会先在那里转换它:date -d "2016-05-31T23:00:00.000Z"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多