NUMTODSINTERVAL Oracle : Convertir un nombre en intervalle

Découvrez la fonction NUMTODSINTERVAL Oracle : syntaxe, exemples pratiques et erreurs courantes pour convertir un nombre en intervalle de temps en SQL.

Illustration du tutoriel SQL Oracle : NUMTODSINTERVAL Oracle : Convertir un nombre en intervalle

null

Publicité

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ètreTypeDescription
nNUMBERLa valeur numérique à convertir. Peut être un entier ou un décimal.
'unite'VARCHAR2L’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_minutes en intervalle INTERVAL DAY TO SECOND via NUMTODSINTERVAL.
  • 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.

Publicité

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
FonctionNUMTODSINTERVAL(n, 'unite')
Type retournéINTERVAL DAY TO SECOND
Unités acceptées'DAY', 'HOUR', 'MINUTE', 'SECOND'
Compatible avecDATE, TIMESTAMP, opérations arithmétiques
Erreur fréquenteUnité mal orthographiée → ORA-01760
Fonction complémentaireNUMTOYMINTERVAL pour les intervalles année-mois

Bonnes pratiques Oracle

  1. Utilisez TIMESTAMP plutôt que DATE pour les calculs avec NUMTODSINTERVAL : le type TIMESTAMP préserve les fractions de secondes et évite les pertes de précision lors des additions d’intervalles.
  2. 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 à NUMTODSINTERVAL plus 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 :

Sur le même thème

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité