programing

타임스탬프/날짜 시간을 UTC에서 EST Oracle SQL로 변환

muds 2023. 7. 20. 22:12
반응형

타임스탬프/날짜 시간을 UTC에서 EST Oracle SQL로 변환

다음과 같은 날짜/시간 값을 가진 필드가 있습니다.

2009-11-17 18:40:05

UTC에 있습니다.쿼리에서 이를 EST로 변환하려면 어떻게 해야 합니까?

저는 이런 걸 시도하고 있는데 오류가 납니다.

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

데이터베이스에서 작동하기 위해 약간 수정해야 했지만, 이것은 효과가 있었습니다.

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

핵심은 "at time zone" 구문입니다.

날짜 필드를 UTC에서 EST로 변환하려면 다음과 같이 해야 합니다.

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

먼저 원하는 날짜 필드(DATE_FIELD)를 타임스탬프에 캐스팅합니다.캐스트 결과는 FROM_TZ 함수의 첫 번째 매개 변수이며, 이 매개 변수는 TIMESTAMP 유형이어야 합니다. 두 번째 매개 변수는 'UTC'입니다. 이것이 바로 우리가 변경하는 것이기 때문입니다.

그런 다음 함수 호출 결과를 DATE 유형으로 다시 캐스트하고 별칭을 지정합니다.

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

Oracle에서 사용해 보십시오. 12.2.0.1.0 64비트를 사용하고 있습니다.

SELECT * FROM v$version; --find version information
SELECT SYSDATE UTC, NEW_TIME(SYSDATE, 'GMT', 'EST') EST FROM DUAL; --will give both zones

이것은 나에게도 효과가 있었고, 당신에게도 효과가 있을 것입니다.

날짜와 시간을 얻는 다른 접근법은 다음과 같습니다.

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

언급URL : https://stackoverflow.com/questions/1751075/convert-timestamp-date-time-from-utc-to-est-oracle-sql

반응형