SQL FAQ – часто задаваемые вопросы по SQL


Вопрос: Как в SQL определить количество часов между двумя датами?
Решение:
SELECT ((24 * extract(DAY
    FROM (startDate - endDate) DAY(9) TO SECOND)) + extract(hour
        FROM (startDate - endDate) DAY(9) TO SECOND) + ((1/100) * extract(MINUTE
            FROM (startDate - endDate) DAY(9) TO SECOND)))
FROM exampleTable;
startDate - начальная дата
endDate - конечная дата
exampleTable - таблица

Вопрос: Как определить количество дней между двумя датами?
Решение: Просто вычислить разность между ними.
select trunc(sysdate, 'DD') "END"
, to_date('2012-12-01', 'YYYY-MM-DD') "START"
, (trunc(sysdate, 'DD') - to_date('2012-12-01', 'YYYY-MM-DD')) "DAYS"
from dual;

Вопрос: Как сделать цикл на SQL в Oracle?
Решение:
select 
    "start" + (level - 1)
    , level "level" -- уровень (типа счетчика итераций)
from 
    -- "start" - начальное значение, "end" - количество итераций
    (select 1 "start", 10 "end" from dual) 
connect by 
    (level <= "end") -- условие (как в цикле while)

Question: How does one add a day/hour/minute/second to a date value?
Answer:
http://www.orafaq.com/faq/how_does_one_add_a_day_hour_minute_second_to_a_date_value

...