
null
—
NUMTODSINTERVAL Oracle : convertir un nombre en intervalle jour-seconde
La fonction NUMTODSINTERVAL est une fonction Oracle SQL qui permet de convertir une valeur numérique en un intervalle de type INTERVAL DAY TO SECOND. Très utile dans les calculs de durées, de délais ou de planification, NUMTODSINTERVAL simplifie la manipulation des intervalles de temps dans vos requêtes Oracle sans passer par des conversions manuelles complexes.
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
Définition et utilisation de NUMTODSINTERVAL
La fonction NUMTODSINTERVAL appartient à la famille des fonctions de conversion de dates et d’intervalles dans Oracle Database. Elle prend un nombre décimal et une unité de temps, puis retourne une valeur de type INTERVAL DAY TO SECOND.
Ce type de données est particulièrement adapté pour représenter des durées courtes à moyennes : quelques secondes, minutes, heures ou jours. Contrairement au type INTERVAL YEAR TO MONTH, il gère précisément les fractions de secondes.
Cas d’usage en entreprise
- Gestion des délais de traitement : calculer l’heure d’échéance d’une tâche à partir d’un délai exprimé en heures.
- Planification d’alertes : déclencher une notification X minutes après un événement enregistré.
- Calcul de fenêtres de maintenance : ajouter une durée en heures à un timestamp pour définir une plage d’indisponibilité.
- Reporting RH ou logistique : convertir des durées stockées en minutes ou en secondes dans une colonne numérique pour les afficher en intervalles lisibles.
Syntaxe de NUMTODSINTERVAL
NUMTODSINTERVAL(n, 'unite')
Paramètres
| Paramètre | Type | Description |
|---|---|---|
n | NUMBER | La valeur numérique à convertir. Peut être un entier ou un décimal. |
'unite' | VARCHAR2 | L’unité de temps : 'DAY', 'HOUR', 'MINUTE' ou 'SECOND'. |
Valeurs acceptées pour l’unité
'DAY'— Jours'HOUR'— Heures'MINUTE'— Minutes'SECOND'— Secondes (accepte les décimales pour les fractions)
Important : L’unité est insensible à la casse ('day' et 'DAY' sont équivalents), mais elle doit être orthographiée correctement, sinon Oracle lèvera une erreur.
Exemples pratiques de NUMTODSINTERVAL
Exemple 1 – Calcul d’une date d’échéance en heures
Contexte métier : Dans un système de gestion des tickets d’assistance, chaque ticket possède un délai de résolution exprimé en heures dans la colonne DELAI_HEURES. On souhaite calculer la date limite de résolution à partir de la date de création du ticket.
-- Calcul de la date d'échéance en ajoutant un délai en heures à la date de création
SELECT
ticket_id,
date_creation,
delai_heures,
date_creation + NUMTODSINTERVAL(delai_heures, 'HOUR') AS date_echeance
FROM tickets_support
WHERE statut = 'OUVERT';
Résultat attendu : Pour un ticket créé le 01/06/2025 09:00:00 avec un délai de 4 heures, la colonne date_echeance affichera 01/06/2025 13:00:00.
Ici, NUMTODSINTERVAL(delai_heures, 'HOUR') transforme le nombre d’heures en un intervalle que Oracle peut additionner directement à une valeur TIMESTAMP ou DATE.
Exemple 2 – Fenêtre de maintenance calculée en minutes
Contexte métier : Un système de supervision industrielle enregistre des interventions de maintenance. La durée de chaque intervention est stockée en minutes dans la table INTERVENTIONS. On veut afficher l’heure de fin prévue et filtrer les interventions dépassant 90 minutes.
-- Calcul de la fin d'intervention et filtrage des longues durées
SELECT
intervention_id,
description,
debut_intervention,
duree_minutes,
-- Ajout de la durée en minutes pour obtenir la fin prévue
debut_intervention + NUMTODSINTERVAL(duree_minutes, 'MINUTE') AS fin_prevue,
-- Calcul de l'écart entre fin prévue et maintenant
(debut_intervention + NUMTODSINTERVAL(duree_minutes, 'MINUTE')) - SYSTIMESTAMP AS temps_restant
FROM interventions
WHERE duree_minutes > 90
ORDER BY debut_intervention DESC;
Ce que fait la requête :
- Elle convertit
duree_minutesen intervalleINTERVAL DAY TO SECONDviaNUMTODSINTERVAL. - Elle calcule la fin prévue en ajoutant cet intervalle à l’horodatage de début.
- Elle calcule le temps restant en soustrayant le timestamp courant (
SYSTIMESTAMP). - Elle filtre uniquement les interventions longues (plus de 90 minutes).
Astuce : Lorsque vous travaillez avec des colonnes de type TIMESTAMP, préférez l’utilisation de SYSTIMESTAMP à SYSDATE pour conserver la précision des fractions de secondes.
Erreurs courantes avec NUMTODSINTERVAL
Erreur : unité invalide — ORA-01760
L’erreur la plus fréquente est la spécification d’une unité incorrecte ou mal orthographiée :
-- Exemple d'erreur : 'HOURS' au lieu de 'HOUR'
SELECT NUMTODSINTERVAL(5, 'HOURS') FROM DUAL;
-- ORA-01760: argument illégal pour la fonction
Solution : Oracle n’accepte que les quatre unités strictement définies : 'DAY', 'HOUR', 'MINUTE' et 'SECOND'. Vérifiez toujours l’orthographe exacte, en particulier l’absence du « S » final.
-- Version corrigée
SELECT NUMTODSINTERVAL(5, 'HOUR') FROM DUAL;
-- Résultat : +000000000 05:00:00.000000000
Autre piège fréquent : utiliser NUMTODSINTERVAL avec une colonne de type DATE simple (sans composante horaire). Dans ce cas, Oracle effectuera la conversion implicitement, mais le résultat peut être tronqué si le format d’affichage n’inclut pas les heures. Utilisez TO_TIMESTAMP ou travaillez directement avec des colonnes TIMESTAMP pour des résultats précis.
Résumé
| Point clé | Détail |
|---|---|
| Fonction | NUMTODSINTERVAL(n, 'unite') |
| Type retourné | INTERVAL DAY TO SECOND |
| Unités acceptées | 'DAY', 'HOUR', 'MINUTE', 'SECOND' |
| Compatible avec | DATE, TIMESTAMP, opérations arithmétiques |
| Erreur fréquente | Unité mal orthographiée → ORA-01760 |
| Fonction complémentaire | NUMTOYMINTERVAL pour les intervalles année-mois |
Bonnes pratiques Oracle
- Utilisez TIMESTAMP plutôt que DATE pour les calculs avec
NUMTODSINTERVAL: le typeTIMESTAMPpréserve les fractions de secondes et évite les pertes de précision lors des additions d’intervalles. - Stockez les durées en unité cohérente dans vos tables (toujours en secondes ou toujours en minutes), et documentez ce choix. Cela rend vos appels à
NUMTODSINTERVALplus lisibles, maintenables et moins sujets aux erreurs de conversion.
Aller plus loin
Pour approfondir votre maîtrise des intervalles et de l’arithmétique des dates dans Oracle, consultez ces ressources complémentaires sur courssql.com :
- NUMTOYMINTERVAL Oracle — l’équivalent de NUMTODSINTERVAL pour les intervalles en années et en mois.
- TO_DSINTERVAL Oracle — convertir une chaîne de caractères au format ISO 8601 ou SQL en intervalle
DAY TO SECOND. - Arithmétique des dates et intervalles Oracle — guide complet sur les additions, soustractions et comparaisons de dates, timestamps et intervalles en Oracle SQL.
Sur le même thème
- GROUP BY en SQL Oracle : Guide Complet et Exemples
- SELECT en SQL Oracle : syntaxe et exemples pratiques
- UPDATE en SQL Oracle : modifier des données facilement
- INSERT en SQL Oracle : syntaxe, exemples et bonnes pratiques
- MERGE Oracle SQL : Syntaxe, Exemples et Bonnes Pratiques
- TRUNCATE en Oracle SQL : Guide complet et pratique
