sexta-feira, 8 de julho de 2011

Datas de Calendário em Informix

O tipo de dados DATE armazena uma data do calendário.  Um valor DATE é um numero inteiro representando o numero de dias corridos desde meia-noite do dia 31 de dezembro de 1899.

O formato DATE tem precisão suficiente para realizar as datas para o futuro distante (58.000 séculos). Valores DATE negativos são interpretados como contagem de dias antes da data de época; isto é, um valor DATE –1 representa 30 de dezembro de 1899.

Os valores DATE por ser inteiros, podem ser usados em expressões aritméticas.  Por exemplo, você pode querer a média de uma coluna DATE, ou você pode adicionar 7 ou 365 para uma coluna DATE. Além disso, um rico conjunto de funções existem especificamente para manipular valores de data.

O tipo de dados DATE é compacto, 4 bytes por item. Funções aritméticas e comparações são executadas rapidamente em colunas DATE.

Função MONTHS_BETWEEN

A função MONTHS_BETWEEN requer dois argumentos, cada um dos quais podem ser uma expressão DATE ou DATETIME. Se o primeiro argumento maior que o primeiro, o valor retornado é positivo.

O valor retornado é tipo DECIMAL, representando a diferença entre os dois argumentos, expresso como um valor decimal. Se o primeiro argumento é menor que o segundo argumento, o valor retornado é negativo.

Se as datas do argumentos forem os mesmos dias de um mês ou são os últimos dias de um mês, o resultado é um numero inteiro. Senão um resultado em fração é retornado, com base em um mês de 31 dias. Esta parte fracionaria também pode incluir a diferença na hora, minutos ou segundos, a menos que ambos os argumentos sejam uma expressão DATE.

Abaixo uma query chamando uma função MONTHS_BETWEEN, usando dois valores DATE.

SELECT  MONTHS_BETWEEN((SELECT DATE(parametro_dat)
                                        FROM ped_info_compl
                                        WHERE empresa = a.empresa
                                        AND pedido = a.pedido
                                        AND campo = 'Data Final Projeto'), (SELECT DATE(parametro_dat)
                                                                                         FROM ped_info_compl
                                                                                         WHERE empresa = a.empresa
                                                                                         AND pedido = a.pedido
                                                                                         AND campo = 'Data Inicial Projeto'))
FROM ped_info_compl a
WHERE a.empresa = '01'
AND a.pedido = 18188

O valor retornado da query acima seria de 12 meses, nesse exemplo que coloquei ai, o primeiro argumento desse pedido esta com com o campo definido em DATATIME e seu conteúdo é 2011-07-06 00:00:00 e o segundo argumento tem o seguinte conteúdo 2012-07-06 00:00:00, por isso o retorno seria 12 inteiros.

Função ADD_MONTH

A função ADD_MONTHS trabalha com a expressão DATETIME ou DATE como um primeiro argumento, e requer como segundo argumento um inteiro, especificando o numero de meses para adicionar ao primeiro argumento. O secundo argumento pode ser positivo ou negativo.

O Valor que é retornado é a soma de um valor DATE ou DATETIME do primeiro argumento e um valor INTERVAL UNITS MONTH que é baseado em um numero de meses especificado no segundo argumento.

O tipo de dados retornados depende do tipo de dados do primeiro argumento:

  • Se o primeiro argumento for um valor DATE, ADD_MONTHS retornara um valor DATE;
  • Se o primeiro argumento for um valor DATETIME, ADD_MONTHS retornara um valor DATETIME YEAR TO FRACTIONS(5), com os mesmos valores para unidades de tempo menor do dia como no primeiro argumento.

Se a unidade de tempo day e month especificado no primeiro argumento é o ultimo dia do mês, ou se o mês resultante tem menos dias que o primeiro argumento, então o valor retornado é o ultimo dia do mês em questão. Caso contrario o valor retornara a mesma quantidade de dias do mês do primeiro argumento.

O valor retornado pode ser um ano diferente, se o mês resultante for maior que dezembro ( ou o segundo argumento for um numero negativo, menor que janeiro) do ano do primeiro argumento. Veja os exemplos abaixo:

Uma Query onde é um resultado normal

SELECT order_date
FROM ami_backlog_prev
WHERE order_num = 18188

Resultado

order_date   
-------------
04/05/2011

Adicionando 5 meses

SELECT ADD_MONTHS(order_date,5)
FROM ami_backlog_prev
WHERE order_num = 18188

(expression)   
---------------
04/10/2011 

Adicionando 12 meses

SELECT ADD_MONTHS(order_date,12)
FROM ami_backlog_prev
WHERE order_num = 18188

(expression)   
---------------
04/05/2012
     

Tirando 3 meses

SELECT ADD_MONTHS(order_date,-3)
FROM ami_backlog_prev
WHERE order_num = 18188

(expression)   
---------------
04/02/2011

Tirando 12 meses

SELECT ADD_MONTHS(order_date,-12)
FROM ami_backlog_prev
WHERE order_num = 18188

(expression)   
---------------
04/05/2010
  

Função DATE

A função DATE converte um argumento para um valor DATE. O seu argumento não DATE pode ser qualquer expressão que possa ser convertido para um valor DATE, geralmente um CHAR, DATETIME ou um valor INTEIRO, veja o  exemplo abaixo:

SELECT *
FROM pedidos
WHERE num_pedido < DATE ('31/12/07’)

Nenhum comentário:

Postar um comentário