sábado, 27 de maio de 2017

Timestamp Oracle

Olá!

O tipo de dado (data_type) TIMESTAMP no banco de dados (db) Oracle armazena a combinação de data e hora. De modo que os formatos aceitos em uma instrução SQL para a manipulação desse tipo de dado, são:
  • yyyy-mm-dd hh:mm:ss[.nnnnnn] 
  • yyyy-mm-dd-hh.mm.ss[.nnnnnn] 

Sendo que para cada item do timestamp há as regras:
  • yyyy - Ano 
    • Sempre deve possuir quatro dígitos 
  • mm, dd, hh - Mês, Dia, Hora 
    • Podem possuir de um a dois dígitos. Ou seja, para os números de 1 até 9 não é necessário usar o zero à esquerda. 
  • mm, ss - Minutos, Segundos 
    • Sempre devem possuir dois dígitos. Note que a representação (mm) dos minutos também é a mesma utilizada para o mês, na função to_timestamp os minutos são representados por (mi). 
  • nnnnnn - Nanossegundos 
    • São opcionais, mas se presentes, podem ser descritos com um até seis dígitos. 

Exemplo instrução SQL:

   UPDATE nomeTabela 
      SET nomeColuna = TIMESTAMP'2017-05-27 4:32:25
    WHERE condição;

Outra forma de trabalhar com o timestamp é com a função to_timestamp. Que recebe um texto (string) e converte para timestamp, exemplos:

   UPDATE nomeTabela 
      SET nomeColuna = to_timestamp('27/05/2017', 'dd/mm/yyyy')
    WHERE condição;

   UPDATE nomeTabela 
      SET nomeColuna = to_timestamp('20170527', 'yyyymmdd')
    WHERE condição;


   UPDATE nomeTabela 
      SET nomeColuna = to_timestamp('20170527043225', 'yyyymmddhhmiss')
    WHERE condição;

Veja que a função recebe dois parâmetros. O primeiro é a string a ser convertida, e o segundo parâmetro é o formato para encontrar os itens do timestamp dentro da string a ser convertida.

Observação: o mês e dia devem ser maior que zero.
*Se mês igual a zero, é retornado:
Erro de SQL: ORA-01843: not a valid month

*Se dia igual a zero, é retornado:
Erro de SQL: ORA-01847: day of month must be between 1 and last day of month

Consultar a relação de Termos e Abreviaturas acesse aqui.

FELIPE BARBOSA FERREIRA
Até o próximo post!