Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction FROM_TZ() dans Oracle

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)

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: