Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вопрос по дате (date, timestamp, number)  [new]
justis
Member

Откуда:
Сообщений: 22
Вообщем чет не могу догнать как мне получить нужное мне время, подскажите плиз

В столбце хранится дата, в очень извращенном формате:

Столбец:
CREATETIME NUMBER(17)

Значения:
2.00904280635338E16
2.00904280852085E16
2.00904290901259E16
2.00904280242319E16

Как она туда пишется и откуда - не могу посмотреть, модель блин что б его "ЧЕРНОГО ЯЩИКА"
Мне надо достать оттуда дату, причем нормальную (наш часовой)...

методом научного затыка
select to_timestamp(to_char('2.00904280635338E16','99999999999999999'),'YYYYMMDDHH24MISSFF') from dual
было выяснено что это дата и вермя сервера по GMT... Я хочу получить нормальное моего часового пояса.

select sessiontimezone, dbtimezone from dual;
возвращает
+07:00 +08:00

Как привести дату по гринвичу в дату по dbtimezone?
Пытался
select TO_TIMESTAMP_TZ(TO_TIMESTAMP (TO_CHAR ('2.00904280635338E16', '99999999999999999'),'YYYYMMDDHH24MISSFF')) from dual
28.04.2009 6:35:33.800000000 +07:00
Только еще больше запутался...
30 апр 09, 07:27    [7132126]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дате (date, timestamp, number)  [new]
justis
Member

Откуда:
Сообщений: 22
Ошибся малех прикопировании:

select TO_TIMESTAMP_TZ(TO_TIMESTAMP (TO_CHAR ('2.00904280635338E16', '99999999999999999'),'YYYYMMDDHH24MISSFF')) from dual


select TO_TIMESTAMP_TZ(TO_CHAR ('2.00904280635338E16', '99999999999999999'),'YYYYMMDDHH24MISSFF') from dual
30 апр 09, 07:32    [7132132]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дате (date, timestamp, number)  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
tst> select systimestamp, systimestamp at time zone 'Europe/Moscow' from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
SYSTIMESTAMPATTIMEZONE'EUROPE/MOSCOW'
---------------------------------------------------------------------------
30-APR-09 02.33.08.210454 PM +11:00
30-APR-09 07.33.08.210454 AM EUROPE/MOSCOW
30 апр 09, 07:33    [7132134]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дате (date, timestamp, number)  [new]
justis
Member

Откуда:
Сообщений: 22
Вячеслав Любомудров,
Спасибо...

Эм, а где посмотреть свою зону?

Все равно не понятно

select sys_extract_utc(TO_TIMESTAMP(TO_CHAR (sysdate, 'YYYYMMDDHH24MISS'),'YYYYMMDDHH24MISS')),sys_extract_utc(systimestamp) from dual;

вернул вот такую вот фигню:
30.04.2009 4:53:27.000000000, 30.04.2009 3:53:27.473362

откуда разница в час времени???
select systimestamp,sysdate from dual;
30.04.2009 11:56:24.573596 +08:00, 30.04.2009 11:56:24
30 апр 09, 07:56    [7132157]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дате (date, timestamp, number)  [new]
justis
Member

Откуда:
Сообщений: 22
Делаю по столбцу:
SELECT to_timestamp(to_char(createtime,'99999999999999999'),'YYYYMMDDHH24MISSFF') T  FROM stations;
выдает
T
28.04.2009 6:35:33.796000000,
28.04.2009 8:52:08.515000000,
29.04.2009 9:01:25.859000000,
28.04.2009 2:42:31.937000000,
29.04.2009 7:40:00.828000000,
23.04.2009 3:51:21.203000000,
28.04.2009 10:05:12.031000000,
28.04.2009 8:37:35.984000000,

добавляю
SELECT to_timestamp(to_char(createtime,'99999999999999999'),'YYYYMMDDHH24MISSFF') T  AT time zone 'Asia/Krasnoyarsk' from stations;

получаю вот это
T
28.04.2009 6:35:33.796000000 +08:00,
28.04.2009 8:52:08.515000000 +08:00,
29.04.2009 9:01:25.859000000 +08:00,
28.04.2009 2:42:31.937000000 +08:00,
29.04.2009 7:40:00.828000000 +08:00,
23.04.2009 3:51:21.203000000 +08:00,
28.04.2009 10:05:12.031000000 +08:00,
28.04.2009 8:37:35.984000000 +08:00,

Эм... в табле хранится NUMBER при переводе в строку, а затем в таймстамп он получается без часового пояса! Добавление AT time zone 'Asia/Krasnoyarsk' как бы просто указало что это красноярскре время. Сделал по другому - я добавил
select FROM_TZ(TO_TIMESTAMP(TO_CHAR (createtime, '99999999999999999'),'YYYYMMDDHH24MISSFF'),'0:00') AT time zone 'Asia/Krasnoyarsk' MT
FROM stations
получаю заветное
MT
28.04.2009 14:35:33.796000000 +08:00,
28.04.2009 16:52:08.515000000 +08:00,
29.04.2009 17:01:25.859000000 +08:00,
28.04.2009 10:42:31.937000000 +08:00,
29.04.2009 15:40:00.828000000 +08:00,
23.04.2009 11:51:21.203000000 +08:00,
28.04.2009 18:05:12.031000000 +08:00,
28.04.2009 16:37:35.984000000 +08:00,

Тоесть по сути я сначала зафигачив в время то что оно по гринвичу функцией FROM_TZ а потом его перевожу на красноярск... Головой можно стукнутся... полный бред.


Подскажите нубасу, как все таки нормлаьно разобратся с этой датой??? Мне поом ей еще с date сравнивать...
30 апр 09, 09:46    [7132536]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дате (date, timestamp, number)  [new]
justis
Member

Откуда:
Сообщений: 22
Конечный вариант просто пугает:
select to_date(to_char(FROM_TZ(TO_TIMESTAMP(TO_CHAR (createtime, '99999999999999999'),'YYYYMMDDHH24MISSFF'),'0:00') AT time zone 'Asia/Krasnoyarsk','DD.MM.YYYY HH24:MI:SS'),'DD.MM.YYYY HH24:MI:SS') MT
FROM drweb.stations

MT
28.04.2009 14:35:33,
28.04.2009 16:52:08,
29.04.2009 17:01:25,
28.04.2009 10:42:31,
29.04.2009 15:40:00,
23.04.2009 11:51:21,
28.04.2009 18:05:12,
28.04.2009 16:37:35,

Должен же быть путь проще... =(
30 апр 09, 10:03    [7132638]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить