2014-11-04 5 views
0

Вот один из наших запросов в базе данных, я пытаюсь понять некоторые конверсии UTC в нашем запросе.Oracle SYS_EXTRACT_UTC пытается понять

Может ли кто-нибудь кратко объяснить, что делает запрос ниже?

SELECT 
CAST (SYS_EXTRACT_UTC (CAST ((BEGIN_DATE - (3/24)) AS TIMESTAMP)) AS DATE) BEGIN_DATE 
FROM offer o 
WHERE mask  = 'OK' 

после преобразования выход: 06-сентября-11 04:00:00

SELECT 
    BEGIN_DATE 
FROM offer o 
WHERE mask  = 'OK' 

перед преобразованием Выход: 06-сентября-11 00:00:00

ответ

0

SYS_EXTRACT_UTC извлекает UTC(Скоординированное универсальное время - ранее среднее время по Гринвичу) от datetime значение с time zone offset или time zone region name.

Например,

SQL> SELECT SYS_EXTRACT_UTC(TIMESTAMP '2014-11-05 12:00:00.00 -08:00') as dt 
    2  FROM DUAL; 

DT 
--------------------------------------------------------------------------- 
05-NOV-14 08.00.00.000000000 PM 

SQL> 

В вашем случае, ваш часовой пояс является -08:00. Итак, используется -3/24.

Например, мой часовой пояс +05:30. В настоящее время,

SQL> select to_char(sysdate, 'mm/dd/yyyy hh:mi:ss am') dt from dual; 

DT 
---------------------- 
11/04/2014 01:12:21 pm 

SQL> 

время эквивалентно UTC есть

SQL> SELECT SYS_EXTRACT_UTC(TIMESTAMP '2014-11-05 01:12:21.00 +05:30') as dt 
    2  FROM DUAL; 

DT 
--------------------------------------------------------------------------- 
04-NOV-14 07.42.21.000000000 PM 

SQL> 
+0

Смотрите мой выбор, я объяснил. 3/24 означает, 8 часов. Ваш часовой пояс на 8 часов. Чтобы вычесть 8 часов с одного дня, вам необходимо преобразовать часы в дневные единицы. Итак, 8 часов - '3/24' дней. –

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