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

3 façons de renvoyer le fuseau horaire à partir d'une valeur Datetime dans Oracle

Vous trouverez ci-dessous trois façons de renvoyer des informations de fuseau horaire à partir d'une valeur datetime dans Oracle Database.

Le EXTRACT() Fonction

Le EXTRACT(datetime) La fonction est utilisée pour extraire diverses parties datetime d'une valeur datetime. Cela inclut les informations de fuseau horaire.

Voici un exemple :

SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;

Résultat :

Australia/Darwin

Dans ce cas, j'ai utilisé le TIMEZONE_REGION argument pour extraire la région du fuseau horaire.

Les arguments disponibles pour extraire diverses informations de fuseau horaire sont :

  • TIMEZONE_HOUR
  • TIMEZONE_MINUTE
  • TIMEZONE_REGION
  • TIMEZONE_ABBR

Il est également possible d'utiliser un TIMEZONE_OFFSET argument, bien que cela n'apparaisse pas dans la syntaxe documentée d'Oracle pour cette fonction.

Voici un exemple d'obtention de l'abréviation du fuseau horaire :

SELECT 
    EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;

Résultat :

ACST

Notez que, lors de l'utilisation des arguments de fuseau horaire ci-dessus, la valeur datetime doit correspondre à une expression de type de données TIMESTAMP WITH TIME ZONE ou TIMESTAMP WITH LOCAL TIME ZONE .

Le EXTRACT() la fonction accepte également des arguments pour d'autres parties datetime, telles que YEAR , MONTH , HOUR , etc.

Le TO_CHAR(datetime) Fonction

Nous pouvons également utiliser le TO_CHAR(datetime) fonctionnent comme une méthode alternative pour obtenir des informations sur le fuseau horaire à partir d'une valeur datetime.

Cette fonction accepte la date/heure ou la valeur d'intervalle comme premier argument et un modèle de format comme deuxième argument. La fonction convertit ensuite la valeur en un type de données de VARCHAR2 dans le format spécifié.

Le modèle de format spécifie le format pour lequel renvoyer la valeur datetime/intervalle. Le modèle de format consiste en un ou plusieurs éléments de format. Cela nous permet d'élaborer soigneusement les résultats pour refléter le format souhaité.

Si nous voulons uniquement renvoyer les informations de fuseau horaire, nous pouvons utiliser l'un des éléments de format à cette fin spécifique.

Il existe quelques éléments de format différents que nous pouvons utiliser lors du retour des informations de fuseau horaire à partir d'une valeur datetime.

Commençons par le TZR élément de format :

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZR'
    )
FROM DUAL;

Résultat :

AUSTRALIA/DARWIN

Cet élément de format renvoie la région du fuseau horaire. Si la valeur datetime inclut uniquement le décalage de fuseau horaire, celui-ci est renvoyé à la place.

Le TZD L'élément de format peut être utilisé pour renvoyer des informations sur l'heure d'été. Il renvoie les informations de fuseau horaire sous une forme abrégée.

Exemple :

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZD'
    )
FROM DUAL;

Résultat :

ACST

Alternativement, nous pouvons utiliser le TZH et TZM éléments de format pour renvoyer les heures et les minutes du fuseau horaire, en fonction du décalage du fuseau horaire.

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZH:TZM'
    )
FROM DUAL;

Résultat :

+09:30

Le TZ_OFFSET() Fonction

Le TZ_OFFSET() La fonction renvoie le décalage de fuseau horaire correspondant à l'argument en fonction de la date d'exécution de l'instruction.

Voici un exemple d'utilisation de TZ_OFFSET() pour renvoyer le décalage de fuseau horaire en fonction de la région de fuseau horaire renvoyée par le EXTRACT() fonction :

SELECT TZ_OFFSET(
    EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;

Résultat :

+09:30

Nous pouvons également passer SESSIONTIMEZONE ou DBTIMEZONE à TZ_OFFSET() pour renvoyer respectivement le fuseau horaire de notre session actuelle et de notre base de données :

SELECT 
    TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
    TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;

Résultat :

   Session        DB 
__________ _________ 
+10:00     +00:00