2016-07-28 3 views
0

В Oracle SQL я слили 4 колонки (Исх имен столбцов: a_d, a_t, d_d, d_t) в 2 колонки (бывших имен: a_d_t и d_d_t), каждый из которых формата : YYYY-MMM-DD HH24:MI. Я пытаюсь найти, сколько времени прошло (дней и часов), для каждого наблюдения, между a_d_t (время начала) и d_d_t (время окончания).Дата и время разница в Oracle SQL

Я пробовал d_d_t - a_d_t и to_date(d_d_t)-to_date(a_d_t), но я получил следующее для каждого: invalid identifier.


Справочно код, который я использовал (который работал), чтобы объединить столбцы является:

to_char(to_date 
(to_char (a_d,'YYYYMMDD') 
    || a_t, 
'YYYYMMDDHH24MI' 
    ), 'YYYY-MM-DD HH24:MI') 
+0

Я думаю, что это дата, код, который я использовал для создания 2 объединенных столбцов, находится выше. –

+0

Вы должны быть более точным, чем это - если бы вы сделали в коде, что вы делали в сообщении, неудивительно, что он не работает. В сообщении вы сказали, что у вас есть имена столбцов a_d, a_t, но в коде у вас есть a_dt и a_time_text. Если то, что вы говорите, в основном верно, то d_d_t и a_d_t уже являются датами, d_d_t - a_d_t должен работать, он не вернет «недопустимый идентификатор». Это правильный способ найти разницу во времени (в днях). – mathguy

+0

@mathguy отредактировал код выше, чтобы лучше соответствовать тому, что я сделал. –

ответ

0

Ваши входы строки, так что вы должны преобразовать их в даты. Но недостаточно сказать to_date, вы должны также дать правильные модели формата.

select to_date(d_d_t, 'yyyy-mm-dd hh24:mi') - to_date(a_d_t, 'yyyy-mm-dd hh24:mi') 
from <...> 

даст вам разницу во времени. Умножьте на 24, вы получите его в часах.

+0

K Я попробовал это в том же запросе, что я создаю 'a_d_t' и' d_d_t', но он не распознает их как идентификаторы. Что мне нужно сделать, чтобы исправить это? –

+0

Вы пишете запрос и пытаетесь получить d_d_t, a_d_t и их разницу, все в одно и то же время? Или вам просто нужна разница? Конечно, вы получите «недопустимый идентификатор», если попытаетесь использовать псевдонимы в том же запросе, где вы создаете их в первый раз, это невозможно. – mathguy

0

Учитывая ваши входы d_d_t, строка a_dare в формате yyyy-mm-dd hh: mi и nls_date_format отличается от нее, вы можете попробовать использовать следующий запрос и увидеть, если он работает.

Чтобы найти промежуток времени между двумя датами, вам необходимо преобразовать строку даты в формат даты.

select col_a, col_b, to_date(col_a,'yyyy-mm-dd hh24:mi:ss')- to_date(col_b,'yyyy-mm-dd hh24:mi:ss')duration 
from x_datedur 

заменить col_a с окончанием времени, col_b с времени начала и x_datedur с имя_таблицей.

+0

Я уже пробовал это, он не работает –

 Смежные вопросы

  • Нет связанных вопросов^_^