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 ])
Où 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: