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
- 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.
| 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):
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.interval('2 hours 20 minutes 30 seconds 1500 ms 3500000 us') - L'instruction suivante renvoie la valeur DECIMAL (8, 0) 90714, qui correspond à 9 ans, 7 mois et 14 jours.
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.interval('1 years 100 months 104 days') - L'instruction suivante renvoie la valeur DECIMAL (6, 0) 230120, qui correspond à 23 heures, 1 minute et 20 secondes.
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.interval('20 hours 181 minutes 20 seconds')
