Oracle Добавить 1 час в SQL
Я просто пытаюсь добавить 1 час к значению, это довольно сложно, где и почему я делаю это, но в основном мне просто нужно запросить что-то вроде этого
select DATE_ADD(hh,1,'2014-10-15 03:30:00 pm') from dual
Я продолжаю читать старые статьи, которые говорят использовать dateAdd или date_add, но я продолжаю получать недопустимые ошибки идентификатора.
Ответы
Ответ 1
select sysdate + 1/24 from dual;
sysdate - это функция без аргументов, которая возвращает тип DATE
+ 1/24 добавляет 1 час к дате
select to_char(to_date('2014-10-15 03:30:00 pm', 'YYYY-MM-DD HH:MI:SS pm') + 1/24, 'YYYY-MM-DD HH:MI:SS pm') from dual;
Ответ 2
Используйте интервал:
select some_date_column + interval '1' hour
from your_table;
Ответ 3
Вы можете использовать тип INTERVAL или просто добавить вычисленное значение числа - "1" равно "1 день".
Первый способ:
select date_column + INTERVAL '0 01:00:00' DAY TO SECOND from dual;
второй способ:
select date_column + 1/24 from dual;
Первый способ удобнее, когда нужно добавить сложное значение - например, "1 день 3 часа 25 минут 49 секунд".
Смотрите также: http://www.oracle-base.com/articles/misc/oracle-dates-timestamps-and-intervals.php
Также вы должны помнить, что у оракула есть два типа интервалов - ДЕНЬ ВТОРОЙ и ГОД В МЕСЯЦ.
Что касается меня, один тип интервалов был бы лучше, но я надеюсь, что люди в оракуле знают, что они делают;)
Ответ 4
Старый способ:
SELECT DATE_COLUMN + 1 is adding a day
SELECT DATE_COLUMN + N /24 to add hour(s) - N being number of hours
SELECT DATE_COLUMN + N /1440 to add minute(s) - N being number of minutes
SELECT DATE_COLUMN + N /86400 to add second(s) - N being number of seconds
Использование INTERVAL:
SELECT DATE_COLUMN + INTERVAL 'N' HOUR or MINUTE or SECOND - N being a number of hours or minutes or seconds.
Ответ 5
Расчет прост
если вы хотите добавить 1 час в день.
каждый день есть 24 часа, вы можете добавить.
select sysdate + 1/24 from dual;
если вы хотите добавить 1 день
select sysdate + 24/24 from dual;
or
select sysdate + 1 from dual;
same as for 2, 3 , 4 day
Для статической даты у вас есть ответ ниже.
Ответ 6
Чтобы добавить/вычесть из DATE
, у вас есть 2 варианта:
Способ № 1:
Самый простой способ - использовать +
и -
для добавления/вычитания дней, часов, минут, секунд и т.д. Из функции DATE
, и ADD_MONTHS()
для добавления/вычитания месяцев и лет из DATE
. Почему? Это потому, что из дней вы можете получить часы и любую меньшую единицу (1 час = 1/24 дня), (1 минута = 1/1440 дней) и т.д. Но вы не можете получить месяцы и годы, поскольку это зависит от сами по месяцам и годам, следовательно, ADD_MONTHS()
и нет add_years(), поскольку из месяцев можно получить годы (1 год = 12 месяцев).
Давайте попробуем их:
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints current date: 19-OCT-2019 20:42:02
SELECT TO_CHAR((SYSDATE + 1/24), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 1 hour: 19-OCT-2019 21:42:02
SELECT TO_CHAR((SYSDATE + 1/1440), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 1 minute: 19-OCT-2019 20:43:02
SELECT TO_CHAR((SYSDATE + 1/86400), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 1 second: 19-OCT-2019 20:42:03
-- Same goes for subtraction.
SELECT SYSDATE FROM dual; -- prints current date: 19-OCT-19
SELECT ADD_MONTHS(SYSDATE, 1) FROM dual; -- prints date + 1 month: 19-NOV-19
SELECT ADD_MONTHS(SYSDATE, 12) FROM dual; -- prints date + 1 year: 19-OCT-20
SELECT ADD_MONTHS(SYSDATE, -3) FROM dual; -- prints date - 3 months: 19-JUL-19
Метод № 2: Используя INTERVAL
s, вы можете легко вычесть интервал (продолжительность) из даты. Более того, вы можете комбинировать сложение или вычитание нескольких единиц одновременно (например, 5 часов и 6 минут и т.д.)
Примеры:
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints current date: 19-OCT-2019 21:34:15
SELECT TO_CHAR((SYSDATE + INTERVAL '1' HOUR), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 1 hour: 19-OCT-2019 22:34:15
SELECT TO_CHAR((SYSDATE + INTERVAL '1' MINUTE), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 1 minute: 19-OCT-2019 21:35:15
SELECT TO_CHAR((SYSDATE + INTERVAL '1' SECOND), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 1 second: 19-OCT-2019 21:34:16
SELECT TO_CHAR((SYSDATE + INTERVAL '01:05:00' HOUR TO SECOND), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 1 hour and 5 minutes: 19-OCT-2019 22:39:15
SELECT TO_CHAR((SYSDATE + INTERVAL '3 01' DAY TO HOUR), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date + 3 days and 1 hour: 22-OCT-2019 22:34:15
SELECT TO_CHAR((SYSDATE - INTERVAL '10-3' YEAR TO MONTH), 'DD-MON-YYYY HH24:MI:SS') FROM dual; -- prints date - 10 years and 3 months: 19-JUL-2009 21:34:15