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

Fonction TRUNC(date) dans Oracle

Dans Oracle Database, le TRUNC(date) renvoie la valeur de date donnée avec la partie heure du jour tronquée à l'unité fournie dans le modèle de format spécifié.

Oracle a aussi un TRUNC(number) syntaxe, qui est utilisée sur les nombres. Cet article concerne uniquement le TRUNC(date) syntaxe, qui est utilisée sur les dates.

Syntaxe

La syntaxe ressemble à ceci :

TRUNC(date [, fmt ])

date est la date à tronquer, et fmt est un modèle de format facultatif qui spécifie une unité pour laquelle tronquer la valeur. Le modèle de format peut être l'un des modèles de format pris en charge pour le TRUNC(date) et ROUND(date) fonctions.

La fonction fonctionne selon les règles du calendrier grégorien (elle n'est pas sensible à la valeur du NLS_CALENDAR paramètre).

Exemple

Voici un exemple :

SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;

Résultat :

01-AUG-35

En voici d'autres :

SELECT 
    TRUNC(DATE '2035-08-22', 'D') AS "D",
    TRUNC(DATE '2035-08-22', 'DD') AS "DD",
    TRUNC(DATE '2035-08-22', 'MONTH') AS "Month",
    TRUNC(DATE '2035-08-22', 'YEAR') AS "Year",
    TRUNC(DATE '2035-08-22', 'CC') AS "CC"
FROM DUAL;

Résultat :

           D           DD        Month         Year           CC 
____________ ____________ ____________ ____________ ____________ 
19-AUG-35    22-AUG-35    01-AUG-35    01-JAN-35    01-JAN-01   

Le résultat est formaté selon le format de date de la session en cours. Voir Comment vérifier le format de date de la session en cours et Comment modifier le format de date de la session en cours pour plus d'informations à ce sujet.

Unité de date par défaut

L'unité de date par défaut est DD :

SELECT 
    TRUNC(DATE '2035-08-22') AS "Default",
    TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;

Résultat :

     Default           DD 
____________ ____________ 
22-AUG-35    22-AUG-35   

Comparé à ROUND()

Le TRUNC(date) la fonction est différente du ROUND(date) une fonction. Le ROUND() La fonction arrondit la date vers le haut dans certains cas et vers le bas dans d'autres. Le TRUNC() fonction, d'autre part, tronque simplement la date à l'unité spécifiée sans arrondir.

Voici une comparaison pour illustrer cette différence :

SELECT 
    TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
    ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;

Résultat :

       Trunc        Round 
____________ ____________ 
01-DEC-30    01-JAN-31   

Valeurs nulles

Si l'un des arguments est null , le résultat est null :

SET NULL 'null';
SELECT 
    TRUNC(null, 'D'),
    TRUNC(date'2020-12-30', null)
FROM DUAL;

Résultat :

   TRUNC(NULL,'D')    TRUNC(DATE'2020-12-30',NULL) 
__________________ _______________________________ 
              null null                           

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois qu'une valeur nulle se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Nombre d'arguments non valides

Appel de TRUNC() sans argument génère une erreur :

SELECT TRUNC()
FROM DUAL;

Résultat :

Error starting at line : 1 in command -
SELECT TRUNC()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Et l'appeler avec trop d'arguments génère une erreur :

SELECT TRUNC(1, 2, 3)
FROM DUAL;

Résultat :

Error starting at line : 1 in command -
SELECT TRUNC(1, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 20
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: