我正在尝试执行此oracle delete语句
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
部分,但我可以在Google上找到任何东西来获取正确的格式。
感谢您在设置正确格式或指向可以找到正确格式的指针方面的帮助
谢谢
答案 0 :(得分: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_UTC
是DATE
而不是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')
但是上面的解决方案更通用。