Neste post procurarei utilizar exemplos de como inserir valores de datas, (campos TIMESTAMP) incrementando, minutos, segundos, etc, a partir da data atual.
Para começar, vamos criar uma tabela de exemplo, com campo identificador (ID_TESTE) dois campos (DATA1 e DATA2) representando as datas atuais e a data acrescida respectivamente.
Há também a criação (opcional) de uma sequence (TESTE_COM_DATA_SEQ) para facilitar a inserção de valores únicos o campo ID_TESTE.
--criação da tabela de testes CREATE TABLE TESTES_COM_DATA( ID_TESTE INTEGER, DATA1 TIMESTAMP(6), DATA2 TIMESTAMP(6), PRIMARY KEY (ID_TESTE) ); --criação de sequence (opcional) para atribuição de --valores do campo ID_TESTE CREATE SEQUENCE TESTES_COM_DATA_SEQ MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20;
Para começarmos, temos que alterar o formato de exibição de TIMESTAMP para a sessão atual do usuário. Esta alteração não é permanente e é cancelada quando encerramos a sessão.
Observação: Sempre que formos utilizar este tipo de tratativas com datas, temos que utilizar o comando abaixo:
--necessario alterar a sessao, utilizo aqui o formato 'DD/MM/YYYY HH24:MI:SS' ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS';
Feito isso, vamos estudar os códigos para incremento dos valores de Horas, Minutos e Segundos
--TIMESTAMP ADICIONADO HORAS SELECT SYSTIMESTAMP AS DATA_ATUAL , TO_TIMESTAMP( SYSTIMESTAMP + ( 2 --QUANTIDADE DE HORAS ADICIONADAS /24) , 'DD/MM/YYYY HH24:MI:SS') AS DATA_SOMADA_HORAS FROM DUAL; --TIMESTAMP ADICIONADO MINUTOS SELECT SYSTIMESTAMP AS DATA_ATUAL , TO_TIMESTAMP( SYSTIMESTAMP + ( 5 --QUANTIDADE DE MINUTOS ADICIONADOS /(24*60)) , 'DD/MM/YYYY HH24:MI:SS') AS DATA_SOMADA_MINUTOS FROM DUAL; --TIMESTAMP ADICIONADO SEGUNDOS SELECT SYSTIMESTAMP AS DATA_ATUAL , TO_TIMESTAMP( SYSTIMESTAMP + ( 25 --QUANTIDADE DE SEGUNDOS ADICIONADOS /24/60/60) , 'DD/MM/YYYY HH24:MI:SS') AS DATA_SOMADA_SEGUNDOS FROM DUAL;Finalmente, podemos aplicar os conceitos aprendidos dentro de cláusulas de INSERT na tabela do banco:
--inserindo diferença de duas horas INSERT INTO TESTES_COM_DATA ( ID_TESTE ,DATA1 ,DATA2) VALUES( TESTES_COM_DATA_SEQ.NEXTVAL --busca proximo valor para a sequence ,SYSTIMESTAMP --data/hora atual ,(TO_TIMESTAMP( SYSTIMESTAMP + ( 2 --QUANTIDADE DE HORAS ADICIONADAS /24) , 'DD/MM/YYYY HH24:MI:SS') ) --inserção de SYSTIMESTAMP + 2 Horas ); --inserindo diferença de quinze minutos INSERT INTO TESTES_COM_DATA ( ID_TESTE ,DATA1 ,DATA2) VALUES( TESTES_COM_DATA_SEQ.NEXTVAL --busca proximo valor para a sequence ,SYSTIMESTAMP --data/hora atual ,(TO_TIMESTAMP( SYSTIMESTAMP + ( 15 --QUANTIDADE DE MINUTOS ADICIONADOS /(24*60)) , 'DD/MM/YYYY HH24:MI:SS')--inserção de SYSTIMESTAMP + 15 mins ) ); INSERT INTO TESTES_COM_DATA ( ID_TESTE ,DATA1 ,DATA2) VALUES( TESTES_COM_DATA_SEQ.NEXTVAL --busca proximo valor para a sequence ,SYSTIMESTAMP --data/hora atual ,(TO_TIMESTAMP( SYSTIMESTAMP + ( 30 --QUANTIDADE DE SEGUNDOS ADICIONADOS /24/60/60) , 'DD/MM/YYYY HH24:MI:SS')--inserção de SYSTIMESTAMP + 30 segs ) );Resultado final das linhas inseridas:
Podemos também adicionar simultaneamente HORAS/MINUTOS/SEGUNDOS à data atual, como no exemplo abaixo:
--inserindo diferenca de HORAS/MINUTOS/SEGUNDOS INSERT INTO TESTES_COM_DATA ( ID_TESTE ,DATA1 ,DATA2) VALUES( TESTES_COM_DATA_SEQ.NEXTVAL --busca proximo valor para a sequence ,SYSTIMESTAMP --data/hora atual ,(TO_TIMESTAMP( SYSTIMESTAMP + ( 2 --QUANTIDADE DE HORAS ADICIONADAS /24) +( 10 --QUANTIDADE DE MINUTOS ADICIONADOS /(24*60)) + ( 30 --QUANTIDADE DE SEGUNDOS ADICIONADOS /24/60/60) --inserção de SYSTIMESTAMP + 30 segundos ) ) );Resultando em:
Nenhum comentário:
Postar um comentário