Как изменить дату не затрагивая время?
Как можно изменить дату без времени, то есть чтобы время оставалось неизменным?
Формат DATEВ БД: 01.06.2020 8:55:46.
UPDATE t_pet t SET t.date_input='31.05.2020' WHERE t.id in (
111 ,
222 ,
333 )
Так получаю 31.05.2020 00:00:00, а желаемый результат - 31.05.2020 8:55:46.
Ответы (2 шт):
Автор решения: 0xdb
→ Ссылка
Вот так:
UPDATE t_pet t SET
t.date_input = date'2020-05-31' + (t.date_input - trunc (t.date_input))
WHERE t.id in (111, 222, 333)
Воспроизводимый пример (на db<>fiddle):
alter session set nls_date_format='dd.mm.yyyy hh24:mi:ss'
select date'2020-05-31' + (dt - trunc (dt)) res from (
select to_date ('01.06.2020 8:55:46') dt
from dual);
RES
-------------------
31.05.2020 08:55:46
Автор решения: Alex R.
→ Ссылка
Дата в БД представлена как число, где 1.0 соответствует одним целым суткам. Поэтому если необходимо изменить дату на известное количество дней с неизменным временем, то достаточно отнять/прибавить целое число дней.
select
dt - 1
from (select to_date ('01.06.2020 8:55:46') dt from dual);
RES
-------------------
31.05.2020 08:55:46
Иногда это удобно использовать, когда необходимо работать с часами и минутами. Например, прибавить 2 часа 30 минут (1 / 24 * 2.5)
select
dt + 1 / 24 * 2.5
from (select to_date ('01.06.2020 8:55:46') dt from dual);
RES
-------------------
01.06.2020 11:25:46