Oracle: как добавить минуты к метке времени?

36
задан Виталий Олегович 10 February 2015 в 15:24
поделиться

6 ответов

Все другие ответы являются в основном правильными, но я не думаю чей-либо непосредственно отвеченный Ваш исходный вопрос.

Предположение, что "date_and_time" в Вашем примере является столбцом с ДАТОЙ типа или МЕТКОЙ ВРЕМЕНИ, я думаю, что просто необходимо изменить это:

to_char(date_and_time + (.000694 * 31))

к этому:

to_char(date_and_time + (.000694 * 31), 'DD-MON-YYYY HH24:MI')

Это кажется, что Ваш формат даты по умолчанию использует код "HH" в течение часа, не "HH24".

кроме того, я думаю, что Ваш постоянный термин и сбивает с толку и неточен. Я предполагаю то, что Вы сделали, вычисляют, что (.000694) о значении минуты, и Вы умножаете его на число минут, которые Вы хотите добавить (31 в примере, хотя Вы сказали 30 в тексте).

я также запустил бы со дня и разделил бы его на единицы, которые Вы хотите в своем коде. В этом случае (1/48) составил бы 30 минут; или если бы Вы хотели разбить его для ясности, Вы могли бы записать ((1/24) * (1/2)).

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

28
ответ дан Dave Costa 27 November 2019 в 05:06
поделиться

В дополнение к способности добавить много дней к дате, можно использовать типы интервальных данных, принимающие Вас, находятся на Oracle 9i или позже, который может быть несколько легче считать,

SQL> ed
Wrote file afiedt.buf
SELECT sysdate, sysdate + interval '30' minute FROM dual
SQL> /

SYSDATE              SYSDATE+INTERVAL'30'
-------------------- --------------------
02-NOV-2008 16:21:40 02-NOV-2008 16:51:40
118
ответ дан erhun 27 November 2019 в 05:06
поделиться

Если тип данных поля является датой или меткой времени, Oracle должна всегда давать корректный результат, если Вы добавляете корректное число, данное в количестве дней (или корректная часть дня в Вашем случае). Таким образом, при попытке ударить значение через 30 минут, необходимо использовать:

select field + 0.5/24 from table;

На основе информации Вы, если, я верю этому, - то, что Вы пытались сделать, и я совершенно уверен, что она работает.

3
ответ дан Sidnei Andersson 27 November 2019 в 05:06
поделиться

Убедитесь, что Oracle понимает, что время начала является PM, и определить маску формата HH24 для окончательного результата.

SELECT to_char((to_date('12:40 PM', 'HH:MI AM') + (1/24/60) * 30), 'HH24:MI') as time
  FROM dual

TIME
---------
13:10

Примечание: 'AM' в HH:MI просто заполнитель для,/PM индикатор меридиана. Мог быть также 'PM'

1
ответ дан Camilo Díaz Repka 27 November 2019 в 05:06
поделиться

На основе того, что Вы просите, Вы хотите формат HH24:MI для to_char.

1
ответ дан Nathan Neulinger 27 November 2019 в 05:06
поделиться

из http://www.orafaq.com/faq/how_does_one_add_a_day_hour_minute_second_to_a_date_value

Псевдостолбец SYSDATE показывает текущую системную дату и время. Добавление 1 к SYSDATE приведет к сдвигу даты на 1 день. Используйте дроби, чтобы добавить часы, минуты или секунды к дате

SQL> select sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual;

SYSDATE              SYSDATE+1/24         SYSDATE+1/1440       SYSDATE+1/86400
-------------------- -------------------- -------------------- --------------------
03-Jul-2002 08:32:12 03-Jul-2002 09:32:12 03-Jul-2002 08:33:12 03-Jul-2002 08:32:13
11
ответ дан 27 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: