Dans Oracle Database, les fuseaux horaires peuvent être définis à divers endroits. Vous trouverez ci-dessous quatre façons de modifier le fuseau horaire lors de l'utilisation d'Oracle.
Définir le fuseau horaire de la base de données
Vous pouvez définir le fuseau horaire de la base de données lors de la création de la base de données. Pour cela, utilisez le SET TIME_ZONE
clause de la CREATE DATABASE
déclaration.
Exemple :
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
Dans ce cas, j'ai utilisé un nom de région de fuseau horaire. Voir Comment renvoyer une liste de fuseaux horaires valides dans la base de données Oracle pour obtenir une liste complète des noms de région valides sur votre système.
Vous pouvez également utiliser un décalage horaire réel :
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';
Si vous ne définissez pas explicitement le fuseau horaire lors de la création de la base de données, il prend par défaut le fuseau horaire du système d'exploitation du serveur.
Vous pouvez également modifier le paramètre de fuseau horaire actuel de la base de données. Pour cela, utilisez la ALTER DATABASE
déclaration.
Exemple :
ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
Notez que le fuseau horaire de la base de données n'est pertinent que pour TIMESTAMP WITH LOCAL TIME ZONE
Colonnes. En outre, Oracle recommande de définir le fuseau horaire de la base de données sur UTC (0:00) pour éviter la conversion des données et améliorer les performances lorsque les données sont transférées entre les bases de données.
Définir le fuseau horaire de la session
Vous pouvez définir le fuseau horaire de la session indépendamment du fuseau horaire de la base de données. Lorsque vous renvoyez TIMESTAMP WITH LOCAL TIME ZONE
données, elles sont renvoyées dans le fuseau horaire de la session en cours.
Le fuseau horaire de la session prend également effet lorsqu'un TIMESTAMP
la valeur est convertie en TIMESTAMP WITH TIME ZONE
ou TIMESTAMP WITH LOCAL TIME ZONE
type de données.
Vous pouvez faire plusieurs choses pour définir le fuseau horaire au niveau de la session.
Til ORA_SDTZ
Variable d'environnement
Vous pouvez définir le fuseau horaire de la session avec le ORA_SDTZ
variables d'environnement. Cela peut être défini sur les valeurs suivantes :
- Fuseau horaire local du système d'exploitation (
'OS_TZ'
) - Fuseau horaire de la base de données (
'DB_TZ'
) - Décalage absolu par rapport à UTC (par exemple,
'-04:00'
) - Nom de la région du fuseau horaire (par exemple,
'America/St_Kitts'
)
Voici quelques exemples de définition de cette variable d'environnement dans un environnement UNIX :
% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'
La valeur par défaut de ORA_SDTZ
la variable est 'OD_TZ'
. Cette valeur est utilisée lorsque la variable n'est pas définie ou qu'elle est définie sur une valeur non valide.
La ALTER SESSION
Déclaration
Vous pouvez changer le fuseau horaire pour une session SQL spécifique avec le SET TIME_ZONE
clause de la ALTER SESSION
déclaration.
TIME_ZONE
peut être défini sur les valeurs suivantes :
- Fuseau horaire local par défaut au démarrage de la session (
local
) - Fuseau horaire de la base de données (
dbtimezone
) - Décalage absolu par rapport à UTC (par exemple,
'-04:00'
) - Nom de la région du fuseau horaire (par exemple,
'Canada/Eastern'
)
Voici un exemple de réglage de TIME_ZONE
à de telles valeurs :
ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';
Vous pouvez vérifier le fuseau horaire de votre session actuelle avec le SESSIONTIMEZONE
fonction.
Exemple :
SELECT SESSIONTIMEZONE FROM DUAL;
Résultat :
Australia/Brisbane
Dans mon cas, le fuseau horaire de la session est défini sur Australie/Brisbane.
Le AT TIME ZONE
Article
Une expression datetime peut inclure un AT LOCAL
clause ou un AT TIME ZONE
clause. Si vous incluez un AT LOCAL
clause, le résultat est renvoyé dans le fuseau horaire de la session en cours. Si vous incluez le AT TIME ZONE
clause, le fuseau horaire peut être l'un des suivants :
- Un décalage de fuseau horaire
- Un nom de région de fuseau horaire
DBTIMEZONE
(cette fonction renvoie le fuseau horaire de la base de données)SESSIONTIMEZONE
(cette fonction renvoie le fuseau horaire de la session en cours)- Une expression qui renvoie une chaîne de caractères avec un format de fuseau horaire valide.
Exemple :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT TIME ZONE '+12:00'
FROM DUAL;
Résultat :
02/JAN/30 04:30:35.000000000 AM +12:00
Dans ce cas, j'ai utilisé le FROM_TZ()
fonction pour convertir une valeur d'horodatage et un fuseau horaire en un TIMESTAMP WITH TIME ZONE
valeur. J'ai ensuite utilisé le AT TIME ZONE
clause pour spécifier un fuseau horaire différent.
Voici le même exemple, sauf que cette fois je précise AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT LOCAL
FROM DUAL;
Résultat :
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE