ORACLE日期格式为+00:00部分

问题描述 投票:0回答:1

我正在尝试执行这个oracle删除语句

DELETE FROM mySchema.mytable
WHERE myCol= 'abc'
  and DATE_TIME_UTC >= to_date('2011-07-30 00:00:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM')
  and DATE_TIME_UTC <= to_date('2011-07-31 23:55:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM')

但我明白了

ORA-01821:无法识别日期格式。

很可能是因为+TZH:TZM部分,但我可以在谷歌找到任何东西来获得正确的格式。

感谢您帮助我们设置正确的格式或指针,以便找到正确的格式

谢谢

sql oracle
1个回答
3
投票

DATE数据类型不包含任何时区信息。请改用TIMESTAMP WITH TIME ZONE,即to_timestamp_tz('2011-07-30 00:00:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM')

DELETE FROM mySchema.mytable
WHERE myCol= 'abc'
  and DATE_TIME_UTC >= to_timestamp_tz('2011-07-30 00:00:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM')
  and DATE_TIME_UTC <= to_timestamp_tz('2011-07-31 23:55:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM')

但是,我认为DATE_TIME_UTCDATE值而不是TIMESTAMP WITH TIME ZONE。在这种情况下,您必须将时间戳值转换为UTC,如下所示:

DELETE FROM mySchema.mytable
WHERE myCol= 'abc'
  and DATE_TIME_UTC >= SYS_EXTRACT_UTC(to_timestamp_tz('2011-07-30 00:00:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM'))
  and DATE_TIME_UTC <= SYS_EXTRACT_UTC(to_timestamp_tz('2011-07-31 23:55:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM'))

或者你可以反过来做(最有可能性能较差):

DELETE FROM mySchema.mytable
WHERE myCol= 'abc'
  and FROM_TZ(DATE_TIME_UTC, 'UTC') >= to_timestamp_tz('2011-07-30 00:00:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM')
  and FROM_TZ(DATE_TIME_UTC, 'UTC') <= to_timestamp_tz('2011-07-31 23:55:00+00:00','yyyy-mm-dd HH24:MI:SS+TZH:TZM')

当然,由于所有时间都以UTC格式给出,因此您可以简化它,而您根本不需要考虑时区信息:

DELETE FROM mySchema.mytable
WHERE myCol= 'abc'
  and DATE_TIME_UTC >= to_date('2011-07-30 00:00:00','yyyy-mm-dd HH24:MI:SS')
  and DATE_TIME_UTC <= to_date('2011-07-31 23:55:00','yyyy-mm-dd HH24:MI:SS')

但上述解决方案更为通用。

© www.soinside.com 2019 - 2024. All rights reserved.