INTERVAL fonction scalaire

La fonction INTERVAL convertit une représentation de chaîne de caractères d'un intervalle en durée décimale.

Le schéma est SYSIBM.

Syntaxe

Read syntax diagramSkip visual syntax diagram INTERVAL ( string-constant )
constante chaîne
Représentation sous forme de chaîne de caractères d'un intervalle, par exemple:
'4 years 2 months 3 days'
'3 day 4 year 2 month'
'-4y -2 m -3d'
'-2 hr -21 min -34sec'
'4years 2months 3 days 2 hours 21minutes 34seconds 75 milliseconds 27 microseconds'
'2 mons 3 days 4 yrs 2 hrs 20 mins 30 secs 75 ms 27 us'
Remarque :
  • L'entrée doit être une constante de type chaîne et non une expression ou une valeur de colonne (sqlcode SQL0171N avec SQLSTATE=42815).
  • Un blanc entre chaque valeur et son mot clé d'unité est facultatif.
  • Les valeurs doivent être toutes positives ou négatives.
  • Les mots clés d'unité sont insensibles à la casse.
  • L'ordre des mots clés d'unité n'est pas important.
  • Un mot clé d'unité ne peut pas être utilisé plusieurs fois.
  • Le nombre spécifié pour chaque unité doit être un nombre entier.
  • Les instructions suivantes sont équivalentes:
    INTERVAL (string-constant)
    CAST (string-constant as INTERVAL)
L'intervalle spécifié peut être de l'un des types suivants:
intervalle de temps
La valeur d'entrée ne contient pas d'unités autres que des heures, des minutes ou des secondes et ne peut pas dépasser l'équivalent de '99h 99m 99s' (sqlcode SQL0105N avec SQLSTATE=42604). Une valeur de minutes supérieure à 99 est convertie en heures et une valeur de secondes supérieure à 99 est convertie en minutes. Par exemple, 100 secondes sont converties en 1 minute et 40 secondes.
intervalle de date
La valeur d'entrée ne contient pas d'unités autres que des années, des mois ou des jours et ne peut pas dépasser l'équivalent de '9999y 99m 99d' (sqlcode SQL0105N avec SQLSTATE=42604). Une valeur de mois supérieure à 99 est convertie en années et une valeur de jours supérieure à 99 est convertie en mois de 30 jours. Par exemple, 100 jours sont convertis en 3 mois et 10 jours.
intervalle d'horodatage
La valeur d'entrée ne peut pas dépasser l'équivalent de '9999y 99m 99d 99h 99m 99s 999999us' (sqlcode SQL0105N avec SQLSTATE=42604). Les valeurs en millisecondes et en microsecondes sont combinées en une seule valeur en microsecondes avant d'être évaluées. Si la valeur obtenue dépasse 999999 microsecondes, elle est convertie en secondes. Par exemple, '88 ms 5000000 us' est converti en 5088000 microsecondes. Cette valeur étant supérieure à 999999 microsecondes, elle est convertie en 5.088000 secondes. Une valeur de secondes supérieure à 99 est convertie en minutes. Une valeur de minutes supérieure à 99 est convertie en heures. Une valeur d'heures supérieure à 99 est convertie en jours. Une valeur de jours supérieure à 99 est convertie en mois de 30 jours. Une valeur de mois supérieure à 99 est convertie en années.
Tableau 1. Mots clés pour la représentation des unités de temps
Des mots clés Valeur maximale autorisée lors de la spécification d'un ...
intervalle de temps intervalle de date intervalle d'horodatage
année, années, années, années, année, y (non autorisé) 9999 9999
mois, mois, mons, mon (non autorisé) 119999 119999
jour, jours, j (non autorisé) 3599999 3599999
heure, heures, heures, h, h 99 (non autorisé) 86399999
minute, minutes, minutes, min, min, m 5999 (non autorisé) 2147483647
secondes, secondes, secondes, sec, s 359999 (non autorisé) 2147483647
milliseconde, millisecondes, ms (non autorisé) (non autorisé) 2147483647
microsecondes, microsecondes, us (non autorisé) (non autorisé) 2147483647

Résultat

Le type de données du résultat dépend du type de l'intervalle d'entrée. Si la valeur d'entrée représente:
  • Un intervalle de date, le résultat est une durée de date, qui est une valeur DECIMAL (8, 0).
  • Un intervalle de temps, le résultat est une durée, qui est une valeur DECIMAL (6, 0).
  • Un intervalle d'horodatage, le résultat est une durée d'horodatage, qui est une valeur DECIMAL. La précision de cette valeur varie selon que, après avoir combiné des valeurs de milliseconde et de microsecondes en une seule valeur de microseconde, et après avoir converti les microsecondes supérieures à 999999 en secondes, le nombre de microsecondes restant est égal à zéro:
    • Si tel est le cas, le résultat est DECIMAL (14, 0)
    • Si ce n'est pas le cas, le résultat est DECIMAL (20, 6)

Exemples

  • L'instruction suivante renvoie la valeur DECIMAL (8, 0) 40203:
    interval('4years 2months 3days')
  • L'instruction suivante renvoie la valeur DECIMAL (6, 0) -122030:
    interval('-12 hours -20 minutes -30 seconds')
  • L'instruction suivante renvoie la valeur DECIMAL (20, 6) 40801092630.007055:
    interval('4 years 9 hour 26min 30 seconds 7 ms 55us 8months 1d')
  • L'instruction suivante renvoie la valeur 22035 de DECIMAL (14, 0):
    interval('2 hours 20 minutes 30 seconds 1500 ms 3500000 us')
    Les valeurs de milliseconde (1500) et de microseconde (3500000) sont combinées en une seule valeur de microseconde (5000000) avant d'être évaluées. La valeur résultante dépasse 999999 microsecondes, elle est donc convertie en 5 secondes, qui sont ajoutées aux 30 secondes spécifiées pour un total de 35 secondes.
  • L'instruction suivante renvoie la valeur DECIMAL (8, 0) 90714, qui correspond à 9 ans, 7 mois et 14 jours.
    interval('1 years 100 months 104 days')
    Comme le nombre de jours est supérieur à 99, les 104 jours sont convertis en 3 mois de 30 jours, plus un reste de 14 jours. Les 3 mois sont ajoutés aux 100 mois spécifiés pour un total de 103 mois. Comme le nombre de mois est supérieur à 99, les 103 mois sont convertis en 8 années de 12 mois, plus un reste de 7 mois. Les 8 ans sont ajoutés à l'année spécifiée pour un total de 9 ans.
  • L'instruction suivante renvoie la valeur DECIMAL (6, 0) 230120, qui correspond à 23 heures, 1 minute et 20 secondes.
    interval('20 hours 181 minutes 20 seconds')
    Le nombre de minutes étant supérieur à 99, les 181 minutes sont converties en 3 heures de 60 minutes, plus un reste de 1 minute. Les 3 heures sont ajoutées aux 20 heures spécifiées pour un total de 23 heures.