12월 6, 2021

오라클 시간대

당신이 당신이 어디에 있는지 알고 있다고 생각 바로 그 때,오라클은 완전히 우리를 영역 시간대를 구현했습니다. 이 위대한 행성에서 우리가 어디에 있는지 알아 봅시다.

날짜 데이터 유형과 타임 스탬프 데이터 유형의 비교에 대해 몇 가지 기사를 다시 작성했습니다. 이 문서에서는 한 단계 더 나아가 타임 스탬프 데이터 유형의 오라클의 시간대 기능을 탐구한다. 특히 오라클은 타임 스탬프 데이터 유형에”시간대 포함”및”현지 시간대 포함”을 추가했습니다.

유효한 시간대

데이터베이스가 속한 시간대를 설정할 때 두 가지 옵션이 있습니다. 시간대 표에 항목이 있는 이름으로 지정할 수 있습니다. 목록 1 은 산 표준 시간대에 유효한 표준 시간대 이름을 표시하는 데 사용한 표입니다.

목록 1

SQL> select tzname,tzabbrev from V$TIMEZONE_NAMES where tzabbrev = 'MST'TZNAME TZABBREV------------------------- ----------America/Denver MSTAmerica/Edmonton MSTAmerica/Ensenada MSTAmerica/Mazatlan MSTAmerica/Mexico_City MSTAmerica/Phoenix MSTAmerica/Regina MSTAmerica/Shiprock MSTAmerica/Tijuana MSTCanada/East-Saskatchewan MSTCanada/Mountain MSTCanada/Saskatchewan MSTEurope/Moscow MSTMexico/BajaNorte MSTMexico/BajaSur MSTMexico/General MSTMST MSTMST7MDT MSTNavajo MSTUS/Arizona MSTUS/Mountain MSTW-SU MST

표준 시간대의 핵심은 데이터베이스 표준 시간대입니다. 데이터베이스 생성 시 선택한 표준 시간대를 확인할 수 있습니다. 예를 들어 목록 3 에서와 같이 데이터베이스 변경 명령을 실행해야 합니다. 새 시간대를 적용하려면 데이터베이스를 반송해야 합니다. 또한 시간대가 정의된 타임스탬프의 데이터 형식 열이 있는 경우 시간대를 다시 설정할 수 없습니다. 데이터베이스를 수신 거부한 후 목록 4 에서 변경 내용이 수행되었는지 확인할 수 있습니다. 당신은”시간”으로 다시 전환하고 싶다면:예를 들어,목록 5 에서”형식”을 생성 할 수 있습니다.

목록 2
데이터베이스 시간대 확인

SQL> select DBTIMEZONE from dual;DBTIME-------07:00

목록 3
데이터베이스 시간대 변경

SQL> ALTER database SET TIME_ZONE = 'America/Denver';Database altered.

목록 4

SQL> select DBTIMEZONE from dual;DBTIMEZONE---------------America/Denver

목록 5

SQL> ALTER database SET TIME_ZONE = '-07:00';

세션 시간대

데이터베이스 시간대를 사용하지 않으려면 세션 수준에서 시간대를 설정하는 옵션을 제공합니다. 연결 된 현재 세션에 대 한 다른 표준 시간대를 원하는 경우 목록 6 에서 데이터베이스를 발급 합니다. 세션 시간대를 확인할 수 있습니다.

목록 6
세션 수준에서 시간대 설정

SQL> alter session set TIME_ZONE='-03:00';Session altered.

목록 7
세션 수준 시간대 확인

SQL> select SESSIONTIMEZONE from dual;SESSIONTIMEZONE--------------------------------------------------03:00

현재 시스템 날짜 및 시간을 가져오기 위해 시스템 날짜에 대한 호출이 있는 것처럼 현재 시스템 날짜,시간 및 시간대를 가져오기 위한 호출이 있습니다. 반환되는 데이터 형식은 시간대가 포함된 타임스탬프입니다. 목록 8 에서 현재 시스템 시간 정보를 가져옵니다.

목록 8
시간대 정보로 현재 시스템 타임스탬프 가져오기

SQL> select SYSTIMESTAMP from dual;SYSTIMESTAMP-----------------------------------------------01-SEP-03 10.53.13.574000 AM -07:00

세션 현재 날짜 및 시간에 대한 시스템 타임스탬프 함수의 카운터 부분은 현재 타임스탬프 함수 호출입니다. 그러면 세션 시간대(세션 시간대)와 관련하여 세션의 현재 시간 스탬프가 반환됩니다. 따라서 목록 6 에 정의된 세션 시간대가 있는 경우 목록 9 에서 쿼리를 실행하여 세션의 타임스탬프를 확인할 수 있습니다.

목록 9
세션에 대한 로컬 타임스탬프

SQL> select CURRENT_TIMESTAMP from dual;CURRENT_TIMESTAMP-------------------------------------------------01-SEP-03 02.53.33.753000 PM 03:00

시간대 정보가 포함된 타임스탬프 데이터 유형

테이블 내에 시간대 정보를 저장하는 핵심은 타임스탬프 데이터 유형을 정의한 것입니다. 이 이전 날짜 데이터 유형에게 날짜 및 시간 정보뿐만 아니라 소수 초뿐만 아니라 보유의보다 세분화 된 메커니즘을 제공하기위한 오라클의 큰 새로운 희망이다. 이 데이터 유형에 대한 설명을 위해 오라클의 날짜 및 타임 스탬프 데이터 유형을 비교하십시오. 이 문서의 나머지 부분과 타임 스탬프 데이터 유형에 대한 시간대 옵션을 악용하기 위해 표 1 에 정의 된대로 테이블을 만들었습니다. 목록 10 에서는 시간대가있는 타임 스탬프와 현지 시간대 데이터 유형의 타임 스탬프가 정보를 저장하는 데 사용될 때 어떻게 작동하는지에 대한 간단한 예를 만들었습니다. 먼저 시간대와 세션 시간대를 동일한 값’-07:00’으로 설정했습니다. 그런 다음 날짜 테이블에 시스템 타임 스탬프의 값을 삽입합니다. 그런 다음 현재 세션의 시간대를’-03:00’으로 만 변경합니다. 그러면 현재 세션이 데이터베이스 표준 시간대보다 4 시간 앞서 설정됩니다. 그런 다음 현재 세션 타임 스탬프를 보유 할 행을 날짜 테이블에 삽입합니다. 여기서 이해해야 할 주요 아이디어는 표준 시간대가있는 데이터 유형 타임 스탬프가있는 열이 삽입 문에서 제공된 명시 적 시간을 저장하고 표시한다는 것입니다. 데이터 유형 타임스탬프가 있는 열에는 제공된 명시적 시간이 저장되지만 현재 세션 시간대를 기준으로 하는 값이 표시됩니다. 즉,시간대 정보가 저장되어 있는 단단하고 빠른 타임스탬프를 원할 경우 시간대 데이터 유형과 함께 타임스탬프를 사용해야 합니다. 다른 표준 시간대의 고객에게 날짜 및 시간 정보를 제공하고 현지 시간으로 표시되는 경우 현지 표준 시간대 데이터 유형과 함께 타임스탬프를 사용해야 합니다.

표 1:

타임스탬프 열이 다른 테이블 만들기

create table date_table ( time_stamp_tz TIMESTAMP WITH TIME ZONE, time_stamp_ltz TIMESTAMP WITH LOCAL TIME ZONE);

10
날짜 테이블에 시스템 타임스탬프 삽입

SQL> select dbtimezone,sessiontimezone from dual;DBTIMEZONE SESSIONTIMEZONE---------- -----------------07:00 -07:00SQL> insert into date_table values (SYSTIMESTAMP,SYSTIMESTAMP);1 row created.SQL> alter session set time_zone='-03:00';Session altered. SQL> select dbtimezone,sessiontimezone from dual;DBTIMEZONE SESSIONTIMEZONE---------- -----------------07:00 -03:00SQL> insert into date_table values (LOCALTIMESTAMP,LOCALTIMESTAMP );1 row created.SQL> select time_stamp_tz, time_stamp_ltz from date_table;TIME_STAMP_TZ TIME_STAMP_LTZ------------------------------------- ------------------------------01-SEP-03 10.57.36.642000 AM -07:00 01-SEP-03 02.57.36.642000 PM01-SEP-03 02.57.48.549000 PM -03:00 01-SEP-03 02.57.48.549000 PMSQL> alter session set time_zone='-07:00';Session altered.SQL> select time_stamp_tz, time_stamp_ltz from date_table;TIME_STAMP_TZ TIME_STAMP_LTZ------------------------------------- ------------------------------01-SEP-03 10.57.36.642000 AM -07:00 01-SEP-0310.57.36.642000 AM01-SEP-03 02.57.48.549000 PM -03:00 01-SEP-0310.57.48.549000 AM

우리는 모두 성장하고 시간대를 받아 들였습니다. 누군가를 부르거나 다른 시간대로 여행 할 때 항상 머리 속의 시간 차이를 쉽게 할 수있었습니다. 어떤 이유로 그리니치 표준시/세계 협정시의 오프셋을 통해 시간대의 구현은 어려운 나를 개념화하고 그것이 진정으로 어디에 어떤 시간을 파악하기 위해 만든. 나는 너희가 이 특징에 대해 알게 될 수 있도록 내가 너희에게 준 모범을 가지고 놀아보고,지구상에 너희가 어디에 있는지 알아보고자 한다.

“칼럼니스트 제임스 쿠프만의 모든 기사보기

답글 남기기

이메일 주소는 공개되지 않습니다.