programing

Oracle 시간대가 있는 TIMESTAMP를 DATE로 변환

oldcodes 2023. 7. 28. 22:34
반응형

Oracle 시간대가 있는 TIMESTAMP를 DATE로 변환

표준 시간대가 있는 DB가 있습니다.+04:00 (Europe/Moscow)문자열을 형식으로 변환해야 합니다.YYYY-MM-DD"T"HH24:MI:SSTZH:TZM로.DATEOracle 11g의 데이터 유형입니다.

다시 말해서, 나는 끈을 가지고 있습니다.2013-11-08T10:11:31+02:00그리고 나는 그것을 변환하고 싶습니다.DATE데이터 유형(로컬 DB 표준시)+04:00 (Europe/Moscow)).

문자열용2013-11-08T10:11:31+02:00내가 원하는 변신이 돌아와야 합니다.DATE날짜가 있는 데이터 유형2013-11-08 12:11:31(즉, 시간의 로컬 시간대 변환을 사용하여+04:00 (Europe/Moscow). 문자열의 시간대가 다를 수 있으며,+02:00위의 문자열은 단지 예시일 뿐입니다.

저는 이것을 하려고 했습니다.TIMESTAMP데이터 형식이지만 표준 시간대 변환에 성공하지 못했습니다.

to_timestamp_tz()와 함께 일하는.at time zone절을 사용하여 문자열 리터럴을 다음 값으로 변환할 수 있습니다.timestamp with time zone데이터 유형:

SQL> with t1(tm) as(
  2    select '2013-11-08T10:11:31+02:00' from dual
  3  )
  4  select to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
  5           at time zone '+4:00'         as this_way
  6       , to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
  7           at time zone 'Europe/Moscow' as or_this_way
  8    from t1
  9  /

결과:

THIS_WAY                            OR_THIS_WAY
----------------------------------------------------------------------------
2013-11-08 12.11.31 PM +04:00       2013-11-08 12.11.31 PM EUROPE/MOSCOW

그리고 나서, 우리는cast()값을 산출하는 기능date데이터 유형:

with t1(tm) as(
  select '2013-11-08T10:11:31+02:00' from dual
)
select cast(to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM') 
         at time zone '+4:00' as date)   as this_way  
     , cast(to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM') 
         at time zone 'Europe/Moscow' as date) as or_this_way
  from t1

This_Way             Or_This_Way 
------------------------------------------
2013-11-08 12:11:31  2013-11-08 12:11:31 

시간대 절 및 to_timestamp_tz() 함수에 대해 자세히 알아보십시오.

SELECT
CAST((FROM_TZ(CAST(timezonefield AS TIMESTAMP),'GMT') AT TIME ZONE 'CET') AS DATE) 
FROM table;

GMT의 타임스탬프를 중부 유럽 시간의 현재 시간으로 변환합니다.

시간대가 있는 타임스탬프를 "타임스탬프 날짜"와 동기화된 날짜로 변환하려면 다음을 사용합니다.

select cast(to_timestamp_tz('2013-11-08T10:11:31-02:00'
                           ,'yyyy-mm-dd"T"hh24:mi:sstzh:tzm'
                           ) 
            at time zone to_char(systimestamp
                                ,'tzh:tzm'
                                ) 
            as date
           )
from dual

현재 날짜로 타임스탬프를 캐스트합니다.

캐스트(등록 마스터).Stamp5DateTime as date) >= '05-05-2018' AND (등록마스터)스탬프5날짜날짜) <= '05-05-2018'

CAST(x AT TIME ZONE 'YYYY' AS DATE)를 사용하여 시간대를 관리할 수 있으며, 이를 통해 다음과 같은 이점을 얻을 수 있습니다.

WITH t1 (tm) AS (SELECT TIMESTAMP '2021-12-14 15:33:00 EET' FROM DUAL)

SELECT 'EET' tz, CAST (tm AT TIME ZONE 'Europe/Kaliningrad' AS DATE) AS datetime FROM t1
union SELECT 'MSK' tz, CAST (tm AT TIME ZONE 'Europe/Moscow' AS DATE) AS datetime FROM t1
union SELECT 'CET' tz, CAST (tm AT TIME ZONE 'Europe/Prague' AS DATE) AS datetime FROM t1
union SELECT 'UTC' tz, CAST (tm AT TIME ZONE 'UTC' AS DATE) AS datetime FROM t1

언급URL : https://stackoverflow.com/questions/20089859/oracle-convert-timestamp-with-timezone-to-date

반응형