Mostrando postagens com marcador Datetime. Mostrar todas as postagens
Mostrando postagens com marcador Datetime. Mostrar todas as postagens

31 de mar. de 2021

Tipos de Dados - Datas

    Os tipos de dados que trabalham com datas se dividem em 2 tipos: datahora e intervalos, onde os tipos datahora armazenam datas e horários de fato e intervalos retornam os intervalos entre 2 datas.

    Lembrando que sempre que for trabalhar com tipos de dados de data é bom verificar antes como está a configuração do banco de dados para estes tipos de dados, pois isso pode impactar nos resultados esperados. Para verificar como estão as configurações podemos fazer 2 consultas na tabela dummy DUAL.

    select DBTIMEZONE from dual;

    select SESSIONTIMEZONE from dual;


Tipo de dataValores validos para DataValores validos para  INTERVALOS

YEAR

-4712 até 9999 (excluindo ano 0)

Qualquer inteiro positivo ou negativo

MONTH

01 até 12

0 até 11

DAY

01 até 31 (limitado de acordo com o mês e ano)

Qualquer inteiro positivo ou negativo

HOUR

00 até 23

0 até 23

MINUTE

00 até 59

0 até 59

SECOND

00 até 59.9(n), onde 9(n) é a precisão de milissegundos . A opção 9(n) não se aplica para DATE.

0 até 59.9(n), onde 9(n) é a precisão de milissegundos

TIMEZONE_HOUR

-12 até 14 (Esses valores consideram horários de verão) Não se aplica para DATE ou TIMESTAMP.

Não se aplica

TIMEZONE_MINUTE

00 até 59. Não se aplica para DATE ou TIMESTAMP.

Não se aplica

TIMEZONE_REGION

Consulte a coluna TZNAME na view V$TIMEZONE_NAMES. Não se aplica para DATE ou TIMESTAMP

Não se aplica

TIMEZONE_ABBR

Consulte a coluna TZABBREV na view V$TIMEZONE_NAMES. Não se aplica para DATE ou TIMESTAMP.

Não se aplica

DATE

    O tipo de dados DATE armazena informações de dia e hora, podemos até mesmo utilizar outros tipos de dados para armazenar datas, como um tipo de dados de caracteres por exemplo, contudo essa não é a solução mais adequada visto que para isso temos os tipos de dados de datas, em que é possível diferenciar cada parte da data como dia, mês, ano, hora, minuto e segundo. Também é possível fazer conversões de dados armazenados em colunas do tipo de data para formatos de número ou caractere através das funções TO_CHAR e TO_NUMBER, que veremos mais adiante. Utilizando essas funções é possível criar uma data a partir de um literal.



Como faço para descobrir a data atual no banco de dados? Simples, basta realizar uma consulta na tabela DUAL retornando SYSDATE.



TIMESTAMP

    O Tipo TIMESTAMP funciona como o tipo DATE mas ele armazena a data, a hora e a fração de segundos, podendo ir de 0 a 9 casas para os milissegundos sendo o padrão o valor 6. Assim como é possível retornar a data do sistema, é possível retornar o valor atual de um timestamp no sistema.


    Também é possível utilizar a função TO_TIMESTAMP para converter, por exemplo, uma data para o formato timestamp.


TIMESTAMP WITH TIME ZONE

  O tipo de dados TIMESTAMP[(frações de milissegundos)] WITH TIME ZONE funciona da mesma maneira que o tipo TIMESTAMP, porém, armazena além do timestamp o time zone, que pode estar no formato TIMEZONE REGION NAME ou TIME ZONE OFFSET. Assim como no tipo TIMESTAMP, a fração de segundos pertimitida pode variar de 0 até 9 e quando omitida na declaração da coluna o valor padrão assumido será 6.



TIMESTAMP WITH LOCAL TIME ZONE

    Essa é mais uma variante do tipo TIMESTAMP, porem diferente do TIMESTAMP WITH TIME ZONE na coluna não é armazenado as informações do timestamp do banco de dados e quando é solicitado em um select é retornado de acordo com com o timezone da sessão do usuário. Este tipo de dados é bastante útil quando há uma aplicação que trabalha com diferentes timezones e deve ser exibido as datas e horários de acordo com a configuração de cada usuário. Assim como os demais tipos de dados derivados de timestamp, este também permite determinar a quantidade de casas decimais que serão armazenados para os segundos, podendo ser de 0 a 9 e caso omitido o padrão será 6. Para criar uma coluna utilizando esse tipo é necessário utilizar a seguinte sintaxe:

    TIMESTAMP [(precisão de segundos)] WITH LOCAL TIME ZONE


INTERVALOS

    Intervalos são tipos de dados que armazenam períodos de tempo, temos a possibilidade de armazenar valores de 2 formas: intervalos de anos e meses ou intervalos de dias e segundos. É possível utilizar intervalos como validações na cláusula WHERE de uma consulta.

INTERVAL YEAR TO MONTH

    Armazena um período de tempo baseado em anos e meses, para utilizar temos a seguinte sintaxe:

    INTEVAL YEAR [(precisão dos anos)] TO MONTH

Caso a precisão não seja especificada o valor padrão é 2 e deve ser um número inteiro.

Abaixo alguns exemplos.

Intervalo de 300 meses, será armazenado como 25 anos, enquanto um intervalo de 306 meses é armazenado no como 25 anos e 6 meses.



    A precisão deve ser respeitada, caso contrário irá retornar erro, no exemplo abaixo, não foi determinada a precisão dos anos, que nesse caso assume o valor padrão que é 2, como o literal informado para o ano tem 3 dígitos, excede a precisão de 2 e pode ser resolvido incluindo a precisão após a palavra YEAR.



INTERVAL DAY TO SECOND

    Este intervalo armazena um período de tempo que pode ser em dias, horas, minutos ou segundos, esse tipo de dados é muito útil quanto é necessário armazenar uma diferença precisa entre duas datas e horários.

Sua sintaxe é a seguinte:

    INTEVAL DAY[(precisão do dia)] TO SECOND [(precisão da fração de segundos)]

    Note que neste tipo de dados, podemos informar ou não tanto a precisão do dia quanto a fração de segundos. A fração de segundos, assim como nos tipos TIMESTAMP, pode ser de 0 a 9 e tem como padrão o valor 2, já a precisão dos dias aceita os mesmos valores e também tem a precisão com valor 2 como padrão.


    Também é possível realizar operações entre os tipos DAY TO SECOND. Note no exemplo abaixo, que diminuindo 1 dia de 1440 minutos, o resultado é 0.