Dans Oracle Database, le FROM_TZ()
la fonction convertit une valeur d'horodatage et un fuseau horaire en un TIMESTAMP WITH TIME ZONE
valeur.
Vous transmettez la valeur d'horodatage et le fuseau horaire en tant que deux arguments distincts, et la fonction les renvoie sous la forme d'un TIMESTAMP WITH TIME ZONE
valeur.
Syntaxe
La syntaxe ressemble à ceci :
FROM_TZ(timestamp_value, time_zone_value)
Où timestamp_value
est l'horodatage et time_zone_value
est une chaîne de caractères au format 'TZH:TZM'
ou une expression de caractères qui renvoie une chaîne en TZR
avec TZD
facultatif formater.
Exemple
Voici un exemple :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Résultat :
01/JAN/30 12:30:35.000000000 PM -04:00
Spécifier la région du fuseau horaire
Voici un exemple qui utilise la région du fuseau horaire au lieu du décalage horaire :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Résultat :
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Modifier le fuseau horaire
Vous pouvez utiliser AT LOCAL
ou AT TIME ZONE
clause pour changer l'horodatage résultant en un fuseau horaire différent.
Exemple :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Résultat :
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
Et ici, il utilise AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Résultat :
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Vous pouvez utiliser le SESSIONTIMEZONE
fonction pour vérifier le fuseau horaire de la session en cours, et DBTIMEZONE
pour vérifier le fuseau horaire de la base de données.
Fuseaux horaires non valides
La transmission d'un fuseau horaire non valide entraîne une erreur :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover') FROM DUAL Error report - ORA-01882: timezone region not found
Vous pouvez obtenir une liste des régions de fuseau horaire valides en interrogeant le V$TIMEZONE_NAMES
vue.
Voici ce qui se passe lorsque nous fournissons un décalage de fuseau horaire en dehors de la plage acceptée :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00') FROM DUAL Error report - ORA-01874: time zone hour must be between -15 and 15
Arguments nuls
Passer null
pour le premier argument génère une erreur :
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT FROM_TZ(null, '+10:00') FROM DUAL Error at Command Line : 2 Column : 13 Error report - SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got CHAR 00932. 00000 - "inconsistent datatypes: expected %s got %s" *Cause: *Action:
Passer null
pour le second argument renvoie null
:
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Résultat :
null
Notez que par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null
se produit à la suite d'un SQL SELECT
déclaration.
Cependant, vous pouvez utiliser SET NULL
pour spécifier une autre chaîne à renvoyer. Dans l'exemple ci-dessus, j'ai précisé que la chaîne null
doit être retourné.
Nombre d'arguments invalide
La transmission d'un nombre d'arguments non valide entraîne une erreur :
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: