No banco de dados Oracle, o
TO_YMINTERVAL()
função converte seu argumento para um valor de INTERVAL MONTH TO YEAR
tipo de dados. Sintaxe
A sintaxe fica assim:
TO_YMINTERVAL
( ' { [+|-] years - months
| ym_iso_format
} '
[ DEFAULT return_value ON CONVERSION ERROR ]
)
Você tem a opção de passar o argumento no formato SQL ou no formato ISO.
Aqui está a diferença:
sql_format
é o formato de intervalo SQL compatível com o padrão SQL (ISO/IEC 9075).ds_iso_format
é o formato de duração ISO compatível com o padrão ISO 8601:2004.
No formato SQL,
years
é um número inteiro entre 0 e 999999999 e months
é um número inteiro entre 0 e 11. Espaços em branco adicionais são permitidos entre os elementos de formato. No formato ISO (sintaxe abaixo), anos e meses são números inteiros entre 0 e 999999999. Dias,
hours
, minutes
, seconds
e frac_secs
são inteiros não negativos e são ignorados, se especificados. Não são permitidos espaços em branco no valor. Se você especificar T
, você deve especificar pelo menos uma das hours
, minutes
, ou seconds
valores. A sintaxe para
ds_iso_format
fica assim:[-] P [ years Y ] [months M] [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Exemplos
Aqui estão alguns exemplos para demonstrar.
Formato SQL
Aqui, passo o argumento no formato SQL:
SELECT TO_YMINTERVAL('1-2')
FROM DUAL;
Resultado:
+01-02
Neste caso, passei um ano e dois meses no formato SQL.
Podemos antecedê-lo com seu sinal, se necessário. Vamos inverter para um negativo:
SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;
Resultado:
-01-02
Formato ISO
Neste exemplo passo o mesmo valor, mas em formato ISO:
SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;
Resultado:
+01-02
Aqui está com um valor negativo:
SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;
Resultado:
-01-02
Forneça um valor padrão no erro de conversão
Você também tem a opção de fornecer um valor para retornar caso haja um erro ao converter o argumento em um
INTERVAL MONTH TO YEAR
tipo. Exemplo:
SELECT
TO_YMINTERVAL(
'1y-02m'
DEFAULT '00-00' ON CONVERSION ERROR
)
FROM DUAL;
Resultado:
+00-00
Argumentos nulos
Passando
null
resulta em null
:SET NULL 'null';
SELECT
TO_YMINTERVAL(null)
FROM DUAL;
Resultado:
null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Contagem de argumentos inválida
Chamar a função sem passar nenhum argumento resulta em um erro:
SELECT TO_YMINTERVAL()
FROM DUAL;
Resultado:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function
E passar muitos argumentos resulta em um erro:
SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;
Resultado:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"