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