In Oracle Database, il TO_YMINTERVAL()
La funzione converte il suo argomento in un valore di INTERVAL MONTH TO YEAR
tipo di dati.
Sintassi
La sintassi è questa:
TO_YMINTERVAL
( ' { [+|-] years - months
| ym_iso_format
} '
[ DEFAULT return_value ON CONVERSION ERROR ]
)
Hai la possibilità di passare l'argomento in formato SQL o ISO.
Ecco la differenza:
sql_format
è un formato di intervallo SQL compatibile con lo standard SQL (ISO/IEC 9075).ds_iso_format
è un formato di durata ISO compatibile con lo standard ISO 8601:2004.
In formato SQL, years
è un numero intero compreso tra 0 e 999999999 e months
è un numero intero compreso tra 0 e 11. Sono consentiti spazi aggiuntivi tra gli elementi di formato.
Nel formato ISO (sintassi sotto), anni e mesi sono numeri interi compresi tra 0 e 999999999. Giorni, hours
, minutes
, seconds
e frac_secs
sono numeri interi non negativi e vengono ignorati, se specificati. Non sono ammessi spazi vuoti nel valore. Se specifichi T
, devi specificare almeno uno degli hours
, minutes
o seconds
valori.
La sintassi per ds_iso_format
va così:
[-] P [ years Y ] [months M] [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Esempi
Ecco alcuni esempi da dimostrare.
Formato SQL
Qui passo l'argomento in formato SQL:
SELECT TO_YMINTERVAL('1-2')
FROM DUAL;
Risultato:
+01-02
In questo caso, ho passato un anno e due mesi in formato SQL.
Possiamo anteporre il suo segno se necessario. Capovolgiamolo in negativo:
SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;
Risultato:
-01-02
Formato ISO
In questo esempio passo lo stesso valore, ma in formato ISO:
SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;
Risultato:
+01-02
Eccolo con un valore negativo:
SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;
Risultato:
-01-02
Fornire un valore predefinito in caso di errore di conversione
Hai anche la possibilità di fornire un valore da restituire nel caso in cui si verifichi un errore durante la conversione dell'argomento in un INTERVAL MONTH TO YEAR
digitare.
Esempio:
SELECT
TO_YMINTERVAL(
'1y-02m'
DEFAULT '00-00' ON CONVERSION ERROR
)
FROM DUAL;
Risultato:
+00-00
Argomenti nulli
Passaggio null
risulta null
:
SET NULL 'null';
SELECT
TO_YMINTERVAL(null)
FROM DUAL;
Risultato:
null
Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null
si verifica come risultato di un SQL SELECT
dichiarazione.
Tuttavia, puoi utilizzare SET NULL
per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null
deve essere restituito.
Conteggio argomenti non valido
Chiamando la funzione senza passare alcun argomento, viene visualizzato un errore:
SELECT TO_YMINTERVAL()
FROM DUAL;
Risultato:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function
E il passaggio di troppi argomenti genera un errore:
SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;
Risultato:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"