#sql #oracle #date #difference
#sql #Oracle #Дата #разница
Вопрос:
Я хочу вычислить разницу во времени между двумя датами в sql-запросе Oracle. Я написал следующий запрос:
DECLARE
v_time varchar2(40);
diff_hours varchar2(40);
BEGIN
select substr(((select date_time from observation_measurement where observation_measurement_id=2861971)), 1,17)
into v_time
from dual;
dbms_output.put_line(v_time);
select 24 * (to_date('06-25-2014 09:46:36', 'MM-DD-YYYY hh24:mi:ss')
- to_date(v_time, 'YY-MM-DD hh24:mi:ss')) into diff_hours
from dual;
END;
Первый оператор select возвращает правильный результат. Когда я пытаюсь вычислить разницу во времени с текущей даты на предыдущую расчетную дату, она показывает ошибку. Как я могу получить правильный результат?
Спасибо!!!!
Комментарии:
1. вы пробовали после увеличения размера переменной diff_hours ?
2. Потрясающе. Увеличение размера diff_hours работает. Я этого не заметил. Спасибо 🙂
Ответ №1:
Увеличение размера рабочей переменной diff_hours. Спасибо, Кришна. 🙂
Ответ №2:
Сделайте diff_hours
NUMBER
переменную вместо VARCHAR2
переменной!
Конечно, вы можете сделать diff_hours
достаточно долго, чтобы удерживать все незначительные десятичные дроби, которые выдает ваш запрос, но объявлять это VARCHAR2
в любом случае бессмысленно!
Ответ №3:
Привет, я внес некоторые исправления в ваш запрос. Скажите мне, работает ли это
DECLARE
v_time varchar2(40);
-- Increase the size
diff_hours varchar2(200);
BEGIN
select substr(((select date_time from observation_measurement where observation_measurement_id=2861971)), 1,17)
into v_time
from dual;
dbms_output.put_line(v_time);
-- using the same format mask for both the dates
select 24 * (to_date('06-25-2014 09:46:36', 'MM-DD-YYYY hh24:mi:ss')
- to_date(v_time, 'MM-DD-YYYY hh24:mi:ss')) into diff_hours
from dual;
END;
Ответ №4:
Вы можете увеличить diff_hours, и это может сработать в некоторых случаях, но проблема в том, что в других случаях это может не сработать.
Чтобы быть уверенным, вам нужно явно преобразовать число в строку (пример с 2 цифрами после точки):
select trunc(24*...., 2) into diff_hours