Формат даты ORACLE с частью +00: 00 - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь выполнить этот оператор удаления оракула

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 любую вещь, чтобы получить правильный формат.

Буду признателен за помощь в настройке правильного формата или указателя, где я могу найти правильныйформат

Спасибо

1 Ответ

3 голосов
/ 08 марта 2019

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')

OfКонечно, поскольку все ваше время указано в 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')

Но приведенные выше решения являются более общими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...