Como trabalhar com tipo de dado INTERVAL?
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 )
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.
- 622 leituras
Tags:




