오라클 세계화 - 시간 형식, 시간대 및 시간 상관 함수

최근 데이터 테이블 영역에서 발생하는 경우 적절한 질문은 문제 해결 일반적인 생각은 테이블 필드 형식, 시간대보고, 그리고 볼 수있는 삽입 시간을 보는 방법. 오라클 공식 문서 "데이터베이스 세계화 지원 설명서는"매우 자세한 설명, 대한 유도 학습 있습니다.

 

첫째, 시간 유형

두 가지 범주로 나누어 시간 유형 오라클 - 날짜 시간과 데이터 형식 간격 이 문서는 첫 번째 범주 날짜 시간에 초점을 맞추고 있습니다.

날짜는 네 가지 범주로 나누어 질 수 개의 카테고리 후의 시간대와 관련된다 :

  • 데이트
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE
  • TIMESTAMP WITH LOCAL TIME ZONE

 

1. DATE

제 정확한 보관 일자 + 시간 및 시간대 영역 정보는 저장되지 않는다. 출력 형식과 언어 NLS_DATE_LANGUAGE NLS_DATE_FORMAT 두 개의 초기화 매개 변수에 의해 결정됩니다. 이 두 가지 매개 변수를 기본 출력 형식에 의해 뜻이, 배역하지 않을 때 당신은 쿼리를 지정하지 않는 경우.

SQL> select sysdate from dual;

SYSDATE
-------------------
2014-02-12 01:12:18

 

2. TIMESTAMP

확장 타입의 DATE 9 (기본 6)와 시간대에 소수점 둘째 정확한 저장 일자 + 시간, 영역 정보를 저장하지 않는다. 출력 형식 및 언어에 의해 NLS_TIMESTAMP_FORMAT 및 NLS_DATE_LANGUAGE  결정이 초기화 파라미터. 이 두 가지 매개 변수를 기본 출력 형식에 의해 뜻이, 배역하지 않을 때 당신은 쿼리를 지정하지 않는 경우.

SQL> select localtimestamp from dual;

LOCALTIMESTAMP
---------------------------------------------------------------------------
12-FEB-14 01.14.12.945256 AM

SQL> alter session set nls_timestamp_format='YYYY-MM-DD HH24:MI:SSXFF';
Session altered.

SQL> select localtimestamp from dual;

LOCALTIMESTAMP
---------------------------------------------------------------------------
2014-02-12 01:28:31.652888

 

3. TIMESTAMP WITH TIME ZONE

확장 타입의 TIMESTAMP 9 (기본 6) 내지 제 진수 0 정확한 저장 일자 + 시간, 때 기억 영역 (또는 시간대 및 영역) 정보 . 데이터베이스에 시간대가이 데이터를 볼 상관없이 저장된 현재 클라이언트 세션 시간대와 데이터의 이러한 유형의 데이터는 시간대를 변경하지 않습니다.

create table t1 (id number,time timestamp with time zone);  --创建t1表,其中time 列的数据类型是timestamp with time zone
Table created.

select sessiontimezone from dual; --当前客户端的session timezone 是 -8:00
SESSIONTIMEZONE
---------------------------------------------------------------------------
-08:00

insert into t1 values(1,timestamp '2014-02-12 02:00:00');  --向t1表中插入一条数据  
1 row created.

select * from t1;  --查看t1表,其中time列带时区显示,并且时区为数据被插入时的session timezone
        ID     TIME
----------   ---------------------------------------------------------------------------
         1     2014-02-12 02:00:00.000000 -08:00

alter session set time_zone='-6:00';  --修改当前客户端的session timezone为 -6:00
Session altered.

select * from t1;    --再次查看t1表,其中time列数据无变化
        ID     TIME
----------   ---------------------------------------------------------------------------
         1     2014-02-12 02:00:00.000000 -08:00

 

4. TIMESTAMP WITH LOCAL TIME ZONE

또 다른 유형의 타임 스탬프 연장 9 소수점 둘째 정확한 저장 일자 + 시간 (기본 6), 시간대 정보가 저장되지 않지만 시간 데이터베이스 기반 변환 데이터베이스 시간대에 입력 한 후, 클라이언트 (이 설정 데이터베이스 tmiezone의 의미는, 연산 규모의 소인 WITH LOCAL TIME ZONE 형 등이다). 사용자가이 유형의 데이터를 쿼리 할 때, 오라클은 사용자에게 사용자 세션 시간대 뒷면의 데이터로 변환됩니다.

시간대 클라이언트 -> 시간대 데이터베이스 데이터베이스 tmiezone 세트 - 시간대> 클라이언트 B

create table t2(id number,time timestamp with local time zone);  -- 创建t2表,其中time列为TIMESTAMP WITH LOCAL TIME ZONE
Table created.

insert into t2 values(1,timestamp '2014-02-12 02:10:00 -8:00');  --在t2表插入数据指定时区为-8:00,实际在保存到数据库时转化为基于database timezone的时间保存    
1 row created. 

select sessiontimezone from dual;  --当前客户端的session timezone 为 -6:00
SESSIONTIMEZONE
---------------------------------------------------------------------------
-06:00

select * from t2;  --查看时oracle将数据转换成当前客户端session timezone的时间
        ID      TIME
----------   ---------------------------------------------------------------------------
         1       2014-02-12 04:10:00.000000

 

시간의 종류의 선택

  • DATE : 시간이 높은 시간대 / 지역 정보를 저장하지 않아도되지 정확성을 요구
  • 타임 스탬프 : 높은 시간 정밀도, 시간대 / 지역 정보를 저장 할 필요가 필요하지 않습니다
  • TIMESTAMP WITH TIME ZONE은 : 시간대 / 지역 정보가 저장 될 필요가있다. 이러한이 몇 지역에서 일어난 경우 각 트랜잭션 (시간대)의 시간과 장소의 필요성 정확한 기록은 볼로
  • TIMESTAMP WITH LOCAL TIME ZONE이 : 위치 동작이 발생에 대한 상관 없어, 오직 사용자의 현재 위치에서 운영에 관심이있는 경우 몇 가지 영역의 발생. 예를 들어, 일본 시간의 십의시에서 TV 방송이 있지만, 사실, 난 단지 나를 위해, 시대에 살고 함께 잡을 수있는 몇 가지 중국어에 대한 관심, 가장 편리한는 검색 데이터베이스가 직접 중국 아홉 번에서 방송 시작 하더군요이다.

 

둘째, 시간대

시간대 및 시간대 데이터베이스 세션 - 사실에서, 이전에 이미 알고에 따르면,이 때 오라클을 구별

1. 데이터베이스 시간대

TIMESTAMP WITH LOCAL TIME ZONE 컴퓨팅 저울의 입력으로.

쿼리 방법

SELECT dbtimezone FROM DUAL;

설정 방법

  • (가) DATABASE를 생성에 당신은 SET의 TIME_ZONE 절을 지정할 수 있습니다.
CREATE DATABASE db01
...
SET TIME_ZONE='Europe/London';
-- 或者
CREATE DATABASE db01
...
SET TIME_ZONE='-05:00';
  • 또한 수정할 수 후자 캔 (DB 사항을 적용하려면 다시 시작)
ALTER DATABASE SET TIME_ZONE='Europe/London';
--或者
ALTER DATABASE SET TIME_ZONE='-05:00';

 

2. 세션 시간대

SQL은 현재 세션의 시간대는, 디폴트는 서버 운영 체제의 시간대 때.

쿼리 방법

SELECT sessiontimezone FROM DUAL;

설정 방법

  • 당신은 운영 체제 환경 변수를 설정할 수 있습니다 ORA_SDTZ
setenv ORA_SDTZ 'OS_TZ'  #默认
setenv ORA_SDTZ 'DB_TZ'
setenv ORA_SDTZ 'Europe/London'
setenv ORA_SDTZ '-05:00'
  • 또한 SQL 명령어 세트를 사용할 수 있습니다
ALTER SESSION SET TIME_ZONE=local; -- 相当于os
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Asia/Hong_Kong';
ALTER SESSION SET TIME_ZONE='+10:00';

 

셋째, 시간 상관 함수

날짜 기능 동작 날짜 (DATE), 타임 스탬프 (소인 TIMESTAMP WITH TIME ZONE 소인 WITH LOCAL TIME ZONE)과 간격 (INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH) 치형.

 

날짜 데이터 형식을위한 설계 1. 날짜 시간 함수

함수 기술

ADD_MONTHS

반환NS 날짜  d 를 더한  n 개월

LAST_DAY

반환 토륨달의 전자 마지막 날 포함 date

MONTHS_BETWEEN

보고 사이의 개월 수  date1 와 date2

NEW_TIME

반환 t그는 날짜와 시간  zone2 에 날짜와 시간 때 시간대  zone1 시간대는 date

주 :이 함수는 입력으로 시간대 제한된 수 걸린다. 당신은 결합하여 시간대의 훨씬 더 큰 번호에 액세스 할 수있는  FROM_TZ 기능과 날짜 표현.

NEXT_DAY

반환NS 에 의해 명명 된 첫 번째 평일의 날짜  char 가 나중에보다 date

ROUND(date)

반환NS는  date 에 의해 지정된 단위로 반올림  fmt 포맷 모델

TRUNC(date)

반환NS  date 단위로 절단 날의 시간에 부가하여이 지정된  fmt 형식 모델

 

2. 추가 날짜 시간 함수

날짜 시간 함수 기술

CURRENT_DATE

반환 세션 시간대에 현재 날짜 양력의 값에서 의  DATE 데이터 형식

CURRENT_TIMESTAMP

반품 C를A와 세션 시간대 urrent 날짜와 시간  TIMESTAMP WITH TIME ZONE 

DBTIMEZONE

반환 값을 데이터베이스 시간대의 . 옵셋 값은 시간 영역 또는 시간 영역의 영역 이름

EXTRACT (날짜 시간)

추출물의D 반환 날짜 시간 간격 값 또는 표현식에서 지정된 날짜 필드의 값을

FROM_TZ

금연실RTSTIMESTAMP  A를 시간 영역에서의 값을  TIMESTAMP WITH TIME ZONE 값

LOCALTIMESTAMP

보고 의 값의 세션 타임 존의 현재 날짜 및 시간  TIMESTAMP 데이터 형식

NUMTODSINTERVAL

변하게 하다s의 수를  n 에  INTERVAL DAY TO SECOND 문자

NUMTOYMINTERVAL

전환ERTS 수를  n 에  INTERVAL YEAR TO MONTH 문자

SESSIONTIMEZONE

반환의 값 NS 현재 세션의 시간대를

SYS_EXTRACT_UTC

ExtrUTC로 작용 오프셋 시간대와 날짜에서

SYSDATE

반환 운영 시스템의 날짜 및 시간을 하는에 계정에 데이터베이스의 시간대를 고려하여 데이터베이스가 상주, 데이터베이스가 시작되었을 때 유효했던 서버의 운영 체제

SYSTIMESTAMP

반환이야 분수 초와 시스템의 표준 시간대를 포함하여 시스템 날짜를, 어떤 데이터베이스가 상주에

TO_CHAR (날짜 시간)

변환 a를 날짜 또는 간격 값  DATETIMESTAMPTIMESTAMP WITH TIME ZONE, 또는  TIMESTAMP WITH LOCAL TIME ZONE 의 값으로 데이터 형식  VARCHAR2 에 의해 지정된 형식의 데이터 형식  fmt 데이터 형식

TO_DSINTERVAL

변환하는 채널aracter의 문자열  CHARVARCHAR2NCHAR, 또는  NVARCHAR2 의 값 데이터 타입  INTERVAL DAY TO SECOND 데이터 타입

TO_NCHAR (날짜 시간)

Converts a datetime or interval value of DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONEINTERVAL MONTH TO YEAR, or INTERVAL DAY TO SECOND data type from the database character set to the national character set

TO_TIMESTAMP

Converts a character string of CHARVARCHAR2NCHAR, or NVARCHAR2 data type to a value of TIMESTAMP data type

TO_TIMESTAMP_TZ

Converts a character string of CHARVARCHAR2NCHAR, or NVARCHAR2 data type to a value of the TIMESTAMP WITH TIME ZONE data type

TO_YMINTERVAL

Converts a character string of CHARVARCHAR2NCHAR, or NVARCHAR2 data type to a value of the INTERVAL YEAR TO MONTH data type

TZ_OFFSET

Returns the time zone offset that corresponds to the entered value, based on the date that the statement is executed

 

3. Time Zone Conversion Functions

Time Zone Function Description

ORA_DST_AFFECTED

Enables you to verify whether the data in a column is affected by upgrading the DST rules from one version to another version

ORA_DST_CONVERT

Enables you to upgrade your TSTZ column data from one version to another

ORA_DST_ERROR

Enables you to verify that there are no errors when upgrading a datetime value

 

参考

https://docs.oracle.com/en/database/oracle/oracle-database/19/nlspg/datetime-data-types-and-time-zone-support.html#GUID-7A1BA319-767A-43CC-A579-4DAC7063B243

http://blog.itpub.net/29457434/viewspace-1080444/

发布了295 篇原创文章 · 获赞 35 · 访问量 8万+

추천

출처blog.csdn.net/Hehuyi_In/article/details/104883708