Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função TO_YMINTERVAL() no Oracle


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"