Lorsque récemment rencontré dans une zone de table de données bonnes questions, résolvez idée générale est de regarder le type de champ de table, le fuseau horaire, et les moyens de regarder le temps d'insertion pour voir. Oracle documentation officielle « Base de données de soutien mondialisation Guide » Il y a une description très détaillée, l'apprentissage inductif au sujet.
Tout d'abord, le type de temps
Oracle type de temps divisé en deux catégories - Datetime et l'intervalle des types de données , cet article se concentre sur la première catégorie Datetime.
Datetime peut être divisé en quatre catégories , qui sont associés à fuseau horaire après deux catégories:
- DATE
- TIMESTAMP
- TIMESTAMP AVEC ZONE TEMPS
- TIMESTAMP AVEC ZONE HEURE LOCALE
1. DATE
Date de stockage + temps, à la seconde près , et le temps des informations de zone de zone ne sont pas stockées. Déterminé par le format de sortie et la langue NLS_DATE_LANGUAGE NLS_DATE_FORMAT et deux paramètres d' initialisation. Si vous ne spécifiez pas une requête lorsque ces deux paramètres ne sont pas typecast, volonté par le format de sortie par défaut.
SQL> select sysdate from dual;
SYSDATE
-------------------
2014-02-12 01:12:18
2. TIMESTAMP
DATE type d'expansion, le temps de la date de stockage +, précis à la deuxième décimale de 0 à 9 (par défaut 6), et le fuseau horaire ne sont pas stockées des informations de zone. Par le format de sortie et la langue NLS_TIMESTAMP_FORMAT et NLS_DATE_LANGUAGE décision deux paramètres d'initialisation. Si vous ne spécifiez pas une requête lorsque ces deux paramètres ne sont pas typecast, volonté par le format de sortie par défaut.
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 AVEC ZONE TEMPS
Type TIMESTAMP de dilatation, le moment de la date de stockage +, précis à la deuxième décimale de 0 à 9 (par défaut 6), lorsque la zone de mémoire (ou le fuseau horaire et de la zone) d' informations . Ce type de données avec le fuseau horaire de la session actuelle du client lors de l' enregistrement à la base de données, quel que soit le fuseau horaire afficher ces données, les données ne changera pas le fuseau horaire.
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 AVEC ZONE HEURE LOCALE
Une autre étendue TIMESTAMP de type, date de stockage + temps, précis à la deuxième décimale de 0 à 9 (par défaut 6), les informations de fuseau horaire ne sont pas stockées, mais du moment où le client après l' entrée dans la base de données sur la base fuseau horaire de base de données de conversion (ce qui est le sens de la mise en tmiezone de base de données où, en tant que type d'échelle du temps de calcul TIMESTAMP LOCAL ZONE). Lorsqu'un utilisateur interroge ce type de données, Oracle ensuite converties en données de la zone temps session utilisateur à l'utilisateur.
Un fuseau horaire client -> base de données temps de base de données de la zone tmiezone ensemble - fuseau horaire> Client 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
Le choix du type de temps
- DATE: Le temps nécessaire précision est peu élevé, ne pas besoin d'enregistrer le fuseau horaire / Information sur les alentours
- Timestamp: haute précision temporelle nécessaire, pas besoin d'enregistrer le fuseau horaire / Information sur les alentours
- TIMESTAMP AVEC ZONE HEURE: informations zone / région temps doit être enregistré. Tels que la nécessité des registres précis de l'heure et le lieu de chaque transaction (fuseau horaire) pour voir s'il est arrivé dans quelques locaux
- TIMESTAMP AVEC LOCAL TEMPS ZONE: ne se soucient pas opération de localisation a lieu, est uniquement intéressé par l' exploitation dans votre position actuelle lorsque l'apparition de quelques zones. Par exemple, il y a une émission de télévision dans le temps du Japon dix heures, mais en fait, je me soucie seulement quelques chinois peuvent attraper vivre ensemble dans le temps, pour moi, le plus pratique est une base de données de recherche m'a dit directement , il a commencé à diffuser en Chine neuf fois.
En second lieu, le fuseau horaire
En fait, selon un savoir plus tôt déjà, la distinction entre les deux lorsque Oracle - fuseau horaire et session de base de données de la zone
1. Base de données temps zone
Comme type d'échelles de calcul TIMESTAMP AVEC ZONE HEURE LOCALE.
méthodes requête
SELECT dbtimezone FROM DUAL;
méthode de réglage
- Vous pouvez spécifier une clause SET TIME_ZONE dans la CREATE DATABASE.
CREATE DATABASE db01
...
SET TIME_ZONE='Europe/London';
-- 或者
CREATE DATABASE db01
...
SET TIME_ZONE='-05:00';
- Ce dernier peut également être modifié (DB redémarrer pour prendre effet)
ALTER DATABASE SET TIME_ZONE='Europe/London';
--或者
ALTER DATABASE SET TIME_ZONE='-05:00';
2. Le fuseau horaire de la session
Sql lorsque le fuseau horaire de la session en cours, la valeur par défaut est le temps du système d'exploitation du serveur de la zone.
méthodes requête
SELECT sessiontimezone FROM DUAL;
méthode de réglage
- Vous pouvez définir le système d'exploitation variables d'environnement ORA_SDTZ
setenv ORA_SDTZ 'OS_TZ' #默认
setenv ORA_SDTZ 'DB_TZ'
setenv ORA_SDTZ 'Europe/London'
setenv ORA_SDTZ '-05:00'
- Vous pouvez également utiliser le jeu de commandes 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';
En troisième lieu, la fonction de corrélation temporelle
Datetime fonction date utilisable (DATE), horodatage (TIMESTAMP, TIMESTAMP WITH TIME ZONE, timestamp AVEC LOCAL TIME ZONE) et de l'intervalle (INTERVALLE JOUR POUR SECOND, INTERVALLE ANNÉE AU MOIS) types de valeurs.
1. Fonctions Datetime Conçu pour le type de données DATE
2. Datetime Fonctions supplémentaires
3. Time Zone Conversion Functions
参考