Dans Oracle Database, le TO_DSINTERVAL()
la fonction convertit son argument en une valeur de INTERVAL DAY TO SECOND
type de données.
Syntaxe
La syntaxe ressemble à ceci :
TO_DSINTERVAL ( ' { sql_format | ds_iso_format } '
[ DEFAULT return_value ON CONVERSION ERROR ] )
Vous avez donc la possibilité de passer l'argument au format SQL ou au format ISO.
Voici la différence :
sql_format
est un format d'intervalle SQL compatible avec la norme SQL (ISO/IEC 9075).ds_iso_format
est un format de durée ISO compatible avec la norme ISO 8601:2004.
La syntaxe de sql_format
va comme ceci :
[+ | -] days hours : minutes : seconds [. frac_secs ]
Où :
days
est un entier compris entre 0 et 999999999hours
est un entier compris entre 0 et 23minutes
etseconds
sont des entiers compris entre 0 et 59frac_secs
est la partie fractionnaire des secondes entre 0,0 et 0,999999999.- Un ou plusieurs espaces séparent les jours des heures. Des espaces supplémentaires sont autorisés entre les éléments de format.
Et la syntaxe pour ds_iso_format
:
[-] P [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Où :
days
,hours
,minutes
etseconds
sont des entiers compris entre 0 et 999999999.frac_secs
est la partie fractionnaire des secondes entre 0,0 et 0,999999999.- Aucun espace n'est autorisé dans la valeur.
- Si vous spécifiez
T
, alors vous devez spécifier au moins une deshours
,minutes
, ouseconds
valeurs.
Exemples
Voici quelques exemples à démontrer.
Format SQL
Ici, je passe l'argument au format SQL :
SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;
Résultat :
+135 08:35:47.123456789
On peut le faire précéder de son signe si nécessaire. Renversons-le en négatif :
SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;
Résultat :
-135 08:35:47.123456789
Format ISO
Dans cet exemple je passe la même valeur, mais au format ISO :
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;
Résultat :
+135 08:35:47.123456789
Le voici avec une valeur négative :
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;
Résultat :
-135 08:35:47.123456789
Fournir une valeur par défaut en cas d'erreur de conversion
Vous avez également la possibilité de fournir une valeur à renvoyer en cas d'erreur lors de la conversion de l'argument en un INTERVAL DAY TO SECOND
saisir.
Exemple :
SELECT
TO_DSINTERVAL(
'Oops!'
DEFAULT '00 00:00:00' ON CONVERSION ERROR
)
FROM DUAL;
Résultat :
+00 00:00:00.000000
Arguments nuls
Passer null
donne null
:
SET NULL 'null';
SELECT
TO_DSINTERVAL(null)
FROM DUAL;
Résultat :
null
Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null
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
L'appel de la fonction sans passer d'arguments génère une erreur :
SELECT TO_DSINTERVAL()
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT TO_DSINTERVAL() 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 passer trop d'arguments entraîne une erreur :
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT TO_DSINTERVAL('P135D', 'P135D') FROM DUAL Error report - ORA-12702: invalid NLS parameter string used in SQL function