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

Fonction TO_YMINTERVAL() dans Oracle

Dans Oracle Database, le TO_YMINTERVAL() la fonction convertit son argument en une valeur de INTERVAL MONTH TO YEAR type de données.

Syntaxe

La syntaxe ressemble à ceci :

TO_YMINTERVAL
  ( '  { [+|-] years - months 
       | ym_iso_format 
       } '
    [ DEFAULT return_value ON CONVERSION ERROR ]
  )

Vous avez 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.

Au format SQL, years est un entier compris entre 0 et 999999999, et months est un entier compris entre 0 et 11. Des espaces supplémentaires sont autorisés entre les éléments de format.

Au format ISO (syntaxe ci-dessous), les années et les mois sont des nombres entiers compris entre 0 et 999999999. Jours, hours , minutes , seconds , et frac_secs sont des entiers non négatifs et sont ignorés, s'ils sont spécifiés. 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.

La syntaxe de ds_iso_format va comme ceci :

[-] P [ years Y ] [months M] [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Exemples

Voici quelques exemples à démontrer.

Format SQL

Ici, je passe l'argument au format SQL :

SELECT TO_YMINTERVAL('1-2')
FROM DUAL;

Résultat :

+01-02

Dans ce cas, j'ai passé un an et deux mois au format SQL.

On peut le faire précéder de son signe si nécessaire. Renversons-le en négatif :

SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;

Résultat :

-01-02

Format ISO

Dans cet exemple je passe la même valeur, mais au format ISO :

SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;

Résultat :

+01-02

Le voici avec une valeur négative :

SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;

Résultat :

-01-02

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 MONTH TO YEAR saisir.

Exemple :

SELECT 
    TO_YMINTERVAL(
    '1y-02m'
    DEFAULT '00-00' ON CONVERSION ERROR
    )
FROM DUAL;

Résultat :

+00-00

Arguments nuls

Passer null donne null :

SET NULL 'null';
SELECT 
    TO_YMINTERVAL(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_YMINTERVAL()
FROM DUAL;

Résultat :

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function

Et passer trop d'arguments entraîne une erreur :

SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;

Résultat :

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"