최근 데이터 테이블 영역에서 발생하는 경우 적절한 질문은 문제 해결 일반적인 생각은 테이블 필드 형식, 시간대보고, 그리고 볼 수있는 삽입 시간을 보는 방법. 오라클 공식 문서 "데이터베이스 세계화 지원 설명서는"매우 자세한 설명, 대한 유도 학습 있습니다.
첫째, 시간 유형
두 가지 범주로 나누어 시간 유형 오라클 - 날짜 시간과 데이터 형식 간격 이 문서는 첫 번째 범주 날짜 시간에 초점을 맞추고 있습니다.
날짜는 네 가지 범주로 나누어 질 수 개의 카테고리 후의 시간대와 관련된다 :
- 데이트
- 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. 날짜 시간 함수
함수 | 기술 |
---|---|
반환 t그는 날짜와 시간 주 :이 함수는 입력으로 시간대 제한된 수 걸린다. 당신은 결합하여 시간대의 훨씬 더 큰 번호에 액세스 할 수있는 |
|
2. 추가 날짜 시간 함수
3. Time Zone Conversion Functions
参考