Como trabalhar com tipo de dado INTERVAL?

Versão para impressãoEnviar para amigoVersão PDF

Sintaxe conforme manual: INTERVAL largest_qualifier(n) TO smallest_qualifier

  • O tipo de dado INTERVAL é utilizado para trabalhar com um valor de quantidade porém no formato parecido com DATETIME
  • Os tipos de dados INTERVAL,DATETIME e DATE são compativeis e podem ser utilizados realizar calculos aritimétcos com anos/meses/dias/horas/minutos/segundos/fração de segundos.
  • Existe duas classes de INTERVAL:
    1a) ANO/MES : É limitado a trabalhar com Ano e Mes apenas, não pode definir um detalhe menor.
    2a) DIA/HORA: É limitado a trabalhar com Dia a hora (até fração de segundos).
    Obs.: As duas classes não são compativeis para conversão (CAST). Por exemplo, não é possivel converter ano em dias.
  • É possível converter valores que estejam na mesma classe através de um cast, por exemplo um INTERVAL DAY TO SECOND para INTERVAL SECOND(9) TO SECOND.
    Este cast não funciona na versão 7 do Informix, como "quebra galho" basta criar um procedure com esta:
    -- Procedure especifica para verao 7 do Informix, devido falta de CAST entre tipo INTERVAL
    CREATE PROCEDURE intrvl_to_sec( p INTERVAL second(9) TO second)
    --a sintaxe abaixo também funciona
    --CREATE PROCEDURE intrvl_to_sec( p INTERVAL day(9) TO second)
    RETURNING interval second(9) to second;
      RETURN p ;
    END PROCEDURE ;
    
    

  • Na definição de um campo INTERVAL sempre é informado o valor limite maior e menor a ser trabalhado:
       campo1 INTERVAL hour to minute.
       campo2 INTERVAL day to hour
       campo3 INTERVAL day to fraction
    

  • A sintaxe para representar um dado INTERVAL em modo literal:
    1a) ANO/MES: INTERVAL( yyyy-mm )
    2a) DIA/HORA: INTERVAL( dd hh:mm:ss.fffff )
Exemplo:
CREATE TEMP TABLE tp01 ( int1 INTERVAL DAY TO SECOND, 
     int2 INTERVAL HOUR TO SECOND);
Temporary table created.                                 


-- ERRO na hora do campo int1 devido a limitação de 23 horas e 59 minutos -- 
INSERT INTO tp01 VALUES ("45 24:20:10", "44:10:44");
 1263: A field in a datetime or interval value is incorrect or an illegal operation
 specified on datetime field.                                                      
Error in line 1                                                                    
Near character position 53                                                         

INSERT INTO tp01 VALUES ("45 23:20:10", "44:10:44");
1 row(s) inserted.                                     


UPDATE tp01 SET int2 = int2 + INTERVAL(00:51:00) HOUR TO SECOND;
1 row(s) updated.


UPDATE tp01 SET int1 = int1 + INTERVAL(00:51:00) HOUR TO SECOND;
1 row(s) updated.


SELECT CAST(INT2 AS INTERVAL SECOND(9) TO SECOND) FROM tp01;

(expression)
    162104

1 row(s) retrieved.


SELECT * FROM tp01;

int1         int2
 46 00:11:10  45:01:44

1 row(s) retrieved.


Database closed.

0
Ainda não votado
Sua avaliação: Nenhum