2009-11-17 4 views
12

Mam pole o wartości daty/czasu tak:Konwersja timestamp/data od czasu UTC do EST Oracle SQL

2009-11-17 18:40:05 

Jest w UTC. W zapytaniu jak mogę przekonwertować to na EST?

Próbuję czegoś takiego, ale powoduje to błąd.

// datetime is the field name 
SELECT 
    FROM_TZ(TIMESTAMP TO_DATE(datetime, 'yyyy-mm-dd hh24miss'), 'EST') AS DT 
FROM 
    db_name 

Odpowiedz

15

musiałem podkręcić lekko zmusić go do pracy w mojej bazy danych, ale to działało:

select from_tz(to_timestamp('2009-11-17 18:40:05','yyyy-mm-dd hh24:mi:ss'), 'UTC') 
at time zone 'America/New_York' from dual 

Kluczem jest „na strefy czasowej” składnia.

+0

Po prostu stwierdziłem, że data była w niewłaściwym formacie, Duh :) –

+0

Co to jest składnia "TIMEZONE TO_DATE (...)"? Nigdy wcześniej tego nie widziałem. – Dan

+3

Określanie literałów znacznika czasu jest łatwiejsze dzięki składni ANSI, więc można zastąpić "to_timestamp (" 2009-11-17 18:40:05 "," rrrr-mm-dd hh24: mi: ss ")" z "znacznikiem czasu" 2009 -11-17 18:40:05 "" ... trochę bardziej kompaktowy –

0
select to_char(systimestamp at time zone 'EST','HH') EST_TIME, 
    TO_CHAR(SYSDATE,'HH') EDT_TIME, 
    NEW_TIME(SYSDATE, 
     (
      CASE 
       WHEN to_char(systimestamp at time zone 'EST','HH') = TO_CHAR(SYSDATE,'HH') 
       THEN 'EST' 
       ELSE 'EDT' 
      END 
     ),'GMT') 
    from dual 
2

Jeśli chcesz przekonwertować pola daty od UTC do EST, ten pracował dla mnie:

CAST(FROM_TZ(CAST(DATE_FIELD AS TIMESTAMP), 'UTC') 
at time zone 'America/New_York' AS Date) as DESIRED_FIELD_NAME 

pierwsze, rzucam pole żądaną datę (jak DATE_FIELD) do datownika. Wynik rzutowania jest pierwszym parametrem funkcji FROM_TZ, która wymaga, aby parametr był typu TIMESTAMP. Drugi parametr to "UTC", ponieważ właśnie z tego się przechodzimy.

Następnie rzutuję wyniki tej funkcji z powrotem na typ DATE i nadaj mu alias.