Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction TO_DSINTERVAL() dans Oracle

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 999999999
  • hours est un entier compris entre 0 et 23
  • minutes et seconds sont des entiers compris entre 0 et 59
  • frac_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 et seconds 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 des hours , minutes , ou seconds 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