O tipo de dados INTERVAL inclui um intervalo de tempo. Ele possui vários subtipos:
Todos esses subtipos descrevem intervalos de tempo e podem participar do intervalo completo de operações do tipo INTERVAL; por exemplo, operações de adição e subtração com valores do tipo DATE, TIME ou TIMESTAMP.
Utilize a função CAST para converter de um subtipo para outro, exceto para os intervalos descritos em anos e meses ou meses que não podem ser convertidos para os descritos em dias, horas, minutos e segundos.
A divisão entre meses e dias ocorre porque o número de dias em cada mês varia. O intervalo de um mês e um dia não é significativo e não pode ser convertido de forma sensata em um intervalo equivalente apenas em números de dias.
Um literal de intervalo é definido pela sintaxe:
INTERVAL <cadeia de intervalo> <qualificador de intervalo>
O formato da cadeia de intervalo e o qualificador do intervalo são definidos pela tabela abaixo:
Qualificador de Intervalo | Formato de Cadeia de Intervalo | Exemplo |
---|---|---|
YEAR | '<year>' ou '<sign> <year>' | '10' ou '-10' |
YEAR TO MONTH | '<year>-<month>' ou '<sign> <year>-<month>' | '2-06' ou '- 2-06' |
MONTH | '<month>' ou '<sign> <month>' | '18' ou '-18' |
DAY | '<day>' ou '<sign> <day>' | '30' ou '-30' |
DAY TO HOUR | '<day> <hour>' ou '<sign> <day> <hour>' | '1 02' ou '-1 02' |
DAY TO MINUTE | '<day> <hour>:<minute>' ou '<sign> <day> <hour>:<minute>' | '1 02:30' ou '-1 02:30' |
DAY TO SECOND | '<day> <hour>:<minute>:<second>' ou '<sign> <day> <hour>:<minute>:<second>' | '1 02:30:15' ou '-1 02:30:15.333' |
HOUR | '<hour>' ou '<sign> <hour>' | '24' ou '-24' |
HOUR TO MINUTE | '<hour>:<minute>' ou '<sign> <hour>:<minute>' | '1:30' ou '-1:30' |
HOUR TO SECOND | '<hour>:<minute>:<second>' ou '<sign> <hour>:<minute>:<second>' | '1:29:59' ou '-1:29:59.333' |
MINUTE | '<minute>' ou '<sign> <minute>' | '90' ou '-90' |
MINUTE TO SECOND | '<minute>:<second>' ou '<sign> <minute>:<second>' | '89:59' ou '-89:59' |
SECOND | '<second>' ou '<sign> <second>' | '15' ou '-15.7' |
Onde um intervalo contém um valor de um ano e um mês, é utilizado um hífen entre os dois valores. Neste exemplo, o valor de mês deve estar no intervalo [0, 11]. Se um intervalo contiver um valor de mês e nenhum valor de ano, o valor de mês não será restrito.
É utilizado um espaço para separar dias do resto do intervalo.
Se um intervalo contiver mais de um HOUR, MINUTE e SECOND, será necessário um sinal de dois pontos para separar os valores e todos, exceto o que está mais à esquerda, serão limitados da seguinte forma:
O maior valor à extrema esquerda em um intervalo é +/- 2147483647.
Alguns exemplos de valores de intervalos válidos são:
Alguns exemplos de valores de intervalos inválidos são:
É especificado um campo de dia, portanto, o campo de horas é restrito a [0,23].
Um campo de hora é especificado, portanto, os minutos são restritos a [0,59].
A seguir estão alguns exemplos de literais de intervalos:
INTERVAL '1' HOUR INTERVAL '90' MINUTE INTERVAL '1-06' YEAR TO MONTH