Обновление даты в поле даты и времени без потери формата - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть таблица с двумя столбцами: M_OP_DATE (типа DATE) и M__DT_UTC_DATE (типа TIMESTAMP(3)).Таблица содержит следующие данные:

+---------------------+---------------------+
|      M_OP_DATE      |   M__DT_UTC_DATE    |
+---------------------+---------------------+
| 2018-09-03 00:00:00 | 2018-09-25 20:14:57 |
| 2018-08-31 00:00:00 | 2018-09-25 20:15:05 |
| 2018-08-31 00:00:00 | 2018-09-25 20:15:05 |
+---------------------+---------------------+

Я хотел бы скопировать дату из M_OP_DATE, не касаясь времени, в поле M__DT_UTC_DATE.

Я искал наТАК и нашел этот ответ, который выглядел примерно так, как мне нужно было сделать: уже ответил на вопрос .

Поэтому я адаптировал этот ответ к своим данным и придумал что-то вроде этого:

update FXKAUD_H_DBF set M__DT_UTC_DATE = to_date(substr(M_OP_DATE, 0, 9) || ' ' || to_char(M__DT_UTC_DATE, 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')

Однако результат не был ожидаемым:

+---------------------+---------------------+
|      M_OP_DATE      |   M__DT_UTC_DATE    |
+---------------------+---------------------+
| 2018-08-29 00:00:00 | 2029-08-18 14:47:07 |
+---------------------+---------------------+

Как видите, год - 2029, а день - 18.Это в основном поменяло местами две цифры дня с двумя последними цифрами года.

Когда я пытаюсь просто выбрать, что находится внутри substr(M_OP_DATE, 0, 9), я вижу, что он показывает мне результат, отличный от того, что я вижу в таблице с простым выбором:

select substr(M_OP_DATE, 0, 9) from FXKAUD_H_DBF

+-----------------------+
| SUBSTR(M_OP_DATE,0,9) |
+-----------------------+
| 29-AUG-18             |
+-----------------------+ 

.... и когда я пытаюсь отформатировать эту строку до даты в формате YYYY-MM-DD, возникает проблема:

select to_date(substr(M_OP_DATE, 0, 9), 'YYYY-MM-DD') from FXKAUD_H_DBF

| TO_DATE(SUBSTR(M_OP_DATE,0,9),'YYYY-MM-DD') |
+---------------------------------------------+
| 0029-08-18 00:00:00                         |
+---------------------------------------------+

Может кто-нибудь, пожалуйста, проведите меня через хороший подход?Извините, что не предоставил SQLfiddle, но сайт закрыт для меня (позже я проверю, смогу ли я добавить его к вопросу).

1 Ответ

0 голосов
/ 28 сентября 2018

Один метод:

select M_OP_DATE + (M__DT_UTC_DATE - trunc(M__DT_UTC_DATE))

Или:

select M__DT_UTC_DATE - (trunc(M__DT_UTC_DATE) - M_OP_DATE

Запрос будет:

update FXKAUD_H_DBF set M__DT_UTC_DATE = M__DT_UTC_DATE - (trunc(M__DT_UTC_DATE) - M_OP_DATE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...