Oracle mondialisation - type de temps, le fuseau horaire et la fonction de corrélation temporelle

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

Une fonction La description

ADD_MONTHS

retourns la date  , d plus  n mois

LAST_DAY

Retours the dernier jour du mois qui contient date

MONTHS_BETWEEN

Retour le nombre de mois entre  date1 et date2

NEW_TIME

Retours til date et l' heure dans  le zone2 fuseau horaire lorsque la date et l' heure dans  le zone1 fuseau horaire sont date

Remarque: Cette fonction prend en entrée un nombre limité de fuseaux horaires. Vous pouvez avoir accès à un nombre beaucoup plus de zones de temps en combinant la  FROM_TZ fonction et l'expression_dateheure.

NEXT_DAY

retourns la date du premier jour de la semaine par le nom  char qui est au plus tard date

ROUND(date)

retourns  date arrondie à l'unité spécifiée par le  fmt modèle de format

TRUNC(date)

retourns  date avec la partie de temps du jour tronqué à l'unité spécifiée par le  fmt modèle de format

 

2. Datetime Fonctions supplémentaires

datetime Fonction La description

CURRENT_DATE

Renvoie la date actuelle dans le fuseau horaire de la session une valeur dans le calendrier grégorien, du  DATE type de données

CURRENT_TIMESTAMP

Retourne le cla date et l' heure dusyst dans le fuseau horaire de session en tant que  TIMESTAMP WITH TIME ZONE valeur

DBTIMEZONE

Renvoie la valeur du temps de base de données zone . La valeur est une zone de décalage de temps ou un temps nom de la région de la zone

EXTRACT (Datetime)

extraits d'und renvoie la valeur d'un champ date - heure spécifiée à partir d' une expression de valeur ou de l' intervalle dateheure

FROM_TZ

converts une  TIMESTAMP valeur à un fuseau horaire à une  TIMESTAMP WITH TIME ZONE valeur

LOCALTIMESTAMP

Retour la date et l' heure dans le fuseau horaire de session dans une valeur du  TIMESTAMP type de données

NUMTODSINTERVAL

Convertirs nombre  n à un  INTERVAL DAY TO SECOND littéral

NUMTOYMINTERVAL

Converts nombre  n à un  INTERVAL YEAR TO MONTH littéral

SESSIONTIMEZONE

retourns la valeur du temps de la session en cours de la zone

SYS_EXTRACT_UTC

EXTRagit l'UTC d'un datetime décalage de fuseau horaire

SYSDATE

Returns the date and time of the operating system on which the database resides, taking into account the time zone of the database server's operating system that was in effect when the database was started

SYSTIMESTAMP

Returns the system date, including fractional seconds and time zone of the system on which the database resides

TO_CHAR (datetime)

Converts a datetime or interval value of DATETIMESTAMPTIMESTAMP WITH TIME ZONE, or TIMESTAMP WITH LOCAL TIME ZONE data type to a value of VARCHAR2 data type in the format specified by the fmt date format

TO_DSINTERVAL

Converts a character string of CHARVARCHAR2NCHAR, or NVARCHAR2 data type to a value of INTERVAL DAY TO SECOND data type

TO_NCHAR (datetime)

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万+

Je suppose que tu aimes

Origine blog.csdn.net/Hehuyi_In/article/details/104883708
conseillé
Classement