Кузница ИванКо

30 07 2006

Oracle DST moment

Опубликовано в: sql, work, oracle, Без рубрики — kig @ 09:02

В один момент понадобилось получать таблицу из часов для передачи во вложенные вызовы. Понятно, что select ‘0′ from dual union all … select 23 from dual - не годился. У нас есть переходы на летнее время и хотелось бы их учитывать. ФОРС по моему вопросу признался что это не легко и они написали процедуру специально для такого случая.
А вот как это можно делать селектом. (дата которая подставляется снаружи - через bindParameter в jdbc

SELECT '0' as hour from dual union all
SELECT '1' as hour from dual union all
SELECT '2' as hour from dual union all
SELECT '3' as hour from dual union all
SELECT '4' as hour from dual union all
SELECT '5' as hour from dual union all
SELECT '6' as hour from dual union all
SELECT '7' as hour from dual union all
SELECT '8' as hour from dual union all
SELECT '9' as hour from dual union all
SELECT '10' as hour from dual union all
SELECT '11' as hour from dual union all
SELECT '12' as hour from dual union all
SELECT '13' as hour from dual union all
SELECT '14' as hour from dual union all
SELECT '15' as hour from dual union all
SELECT '16' as hour from dual union all
SELECT '17' as hour from dual union all
SELECT '18' as hour from dual union all
SELECT '19' as hour from dual union all
SELECT '20' as hour from dual union all
SELECT '21' as hour from dual union all
SELECT '22' as hour from dual union all
SELECT '23' as hour from dual union all
SELECT '24' as hour from dual
where rownum < (SELECT DECODE(was || will, '0203', 23, '0302', 25, 24)
FROM (SELECT TO_CHAR(testdate + INTERVAL '1' DAY, 'hh24') was,
TO_CHAR(testdate + INTERVAL '2' DAY, 'hh24') will
FROM (SELECT CAST(TRUNC(TO_DATE('2006.03.26', 'yyyy-mm-dd')) -
INTERVAL '2' DAY + INTERVAL '3' HOUR AS TIMESTAMP WITH TIME ZONE) AT TIME ZONE 'Europe/Moscow' testdate
FROM DUAL)))

Проверял работу, используя данные о переходах на летнее/зимнее время и между ними.

Комментариев нет »

Комментариев нет.

RSS лента комментариев этой записи. TrackBack URL

Оставить комментарий

You must be logged in to post a comment.

Работает на WordPress