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

Comment formater les dates dans Oracle

Cet article contient des exemples courants de formatage des dates dans Oracle Database.

Le format de date par défaut de votre session est déterminé par divers paramètres d'initialisation NLS (voici comment les vérifier). Vous pouvez tirer parti de ces paramètres pour générer un formatage compatible avec les paramètres régionaux.

Vous pouvez également utiliser des fonctions telles que TO_CHAR(number) pour convertir les dates en une chaîne et les formater exactement comme vous le souhaitez à la volée.

Format de date par défaut

Lorsque vous renvoyez une date dans Oracle, par défaut, elle est renvoyée dans le format de date par défaut pour la session en cours.

Exemple :

SELECT DATE '2030-12-10' FROM DUAL;

Résultat :

10/DEC/30

Dans ce cas, le format de date par défaut de ma session est DD/MON/RR , et donc le résultat reflète cela.

Vous pouvez modifier le format en modifiant le NLS_TERRITORY paramètre (qui modifie implicitement d'autres paramètres tels que les paramètres datetime), ou en modifiant le NLS_DATE_FORMAT paramètre directement.

Voici ce qui se passe lorsque je modifie le NLS_TERRITORY paramètre à un autre territoire :

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT DATE '2030-12-10' FROM DUAL;

Résultat :

10.12.30

Le format de date par défaut a été mis à jour pour refléter le format de cette locale.

Il existe également d'autres paramètres datetime NLS, tels que NLS_TIME_FORMAT , NLS_TIME_TZ_FORMAT , NLS_TIMESTAMP_FORMAT , et NLS_TIMESTAMP_TZ_FORMAT dont vous devez être conscient lorsque vous modifiez les formats de date et d'heure.

Consultez également Comment modifier le format de date de votre session si vous souhaitez modifier le format de date et d'heure par défaut pour votre session en cours.

Le TO_CHAR() Fonction

Til TO_CHAR(datetime) La fonction accepte une valeur datetime et renvoie une chaîne formatée d'une manière que vous spécifiez.

Voici un exemple rapide :

SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Résultat :

Wed, 26 September 2035

Ici, la fonction a renvoyé la date fournie dans le premier argument, dans le format spécifié par le deuxième argument.

Le deuxième argument fournit le modèle de format. Le modèle de format peut consister en un ou plusieurs éléments de format. Par exemple, Dy est un élément de format, tout comme DD , Month , etc.

Si vous ne spécifiez pas de format, il est renvoyé en utilisant le format par défaut de la session.

Voir cette liste complète des éléments de format Datetime dans Oracle pour une liste des éléments de format qui peuvent être utilisés pour formater les valeurs datetime avec cette fonction.

Vous trouverez ci-dessous des exemples plus spécifiques.

Renvoyer le nom du jour

Vous pouvez retourner des parties de date individuelles si nécessaire. Par exemple, vous pouvez renvoyer uniquement le nom du jour, uniquement le nom du mois, etc. Il vous suffit d'utiliser l'élément de format applicable comme seul élément de format dans votre modèle de format.

Voici un exemple de renvoi du nom du jour :

SELECT TO_CHAR(DATE '2035-09-26', 'Day')
FROM DUAL;

Résultat :

Wednesday

Dans ce cas, j'ai renvoyé le nom complet du jour.

Nous pouvons utiliser Dy comme dans l'exemple précédent pour renvoyer le nom court du jour :

SELECT TO_CHAR(DATE '2035-09-26', 'Dy')
FROM DUAL;

Résultat :

Wed

Renvoyer le nom du mois

Voici un exemple de renvoi du nom du mois :

SELECT TO_CHAR(DATE '2035-09-26', 'Month')
FROM DUAL;

Résultat :

September

Et le nom court du mois :

SELECT TO_CHAR(DATE '2035-09-26', 'Mon')
FROM DUAL;

Résultat :

September

Sensibilité à la casse

Dans les exemples précédents, nous avons mis en majuscule la première lettre des noms de jour et de mois.

Nous pouvons alternativement utiliser toutes les majuscules pour renvoyer les noms de jour et de mois en majuscules, et toutes les minuscules pour les renvoyer en minuscules.

SELECT 
    TO_CHAR(DATE '2035-09-26', 'DY, Dy, dy')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'DAY, Day, day')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MON, Mon, mon')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MONTH, Month, month')
FROM DUAL;

Résultat :

WED, Wed, wed                           
WEDNESDAY, Wednesday, wednesday         
SEP, Sep, sep                           
SEPTEMBER, September, september         

Langue

Le NLS_DATE_LANGUAGE Le paramètre est utilisé pour déterminer la langue des parties de date qui sont épelées (telles que les noms de jour et les noms de mois). La valeur par défaut de ce paramètre est dérivée du NLS_LANGUAGE paramètre.

Voici un exemple de mise à jour du NLS_DATE_LANGUAGE paramètre, puis renvoyant une date formatée qui inclut le nom du jour et le nom du mois :

ALTER SESSION SET NLS_DATE_LANGUAGE = 'Spanish';
SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Résultat :

Mié, 26 Septiembre 2035

La langue peut également être explicitement spécifiée depuis le TO_CHAR() fonction elle-même. Cela vous permet de remplacer temporairement les paramètres de langue par défaut pour la session en cours, sans affecter ces paramètres.

Exemple :

ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY',
    'NLS_DATE_LANGUAGE = Spanish'
    )
FROM DUAL;

Résultat :

Mié, 26 Septiembre 2035

Dans cet exemple, j'ai défini ma session actuelle pour utiliser l'anglais, puis j'ai exécuté une requête pour générer une date en espagnol.

Comme mentionné précédemment, la sortie de la date en espagnol n'affectait pas le paramètre anglais. Pour le démontrer, j'ai exécuté la requête suivante immédiatement après celle-là (sans changer le NLS_DATE_LANGUAGE paramètre).

SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY'
    )
FROM DUAL;

Résultat :

Wed, 26 September 2035

Comme prévu, le résultat est en anglais, qui est la langue par défaut pour la session en cours.