Pular para o conteúdo

Fóruns SQL e PL/SQL data timestamp Responder a: data timestamp

#147734
Avatar photoJosé Laurindo Chiappa
Moderador

    Primeira coisa, Please , colega : não nos quebre a perna…. Vc inicialmente tinha dito que a coluna na tabela era TIMESTAMP, agora vc diz que “campo ad_DTEXP = Date” ???? DATE é uma coisa, TIMESTAMP é outra !!!! São COISAS COMPLETAMENTE DIFERENTES!!!!! Se vc não usar os datatypes CORRETOS, vc Só Pode receber erros na cara, os mais aparentemente loucos….. E isso não é NADA ESTRANHO, se vc violar a regra de utilização vc só pode obter resultados não-ótimos….

    Muito bem : SUPONDO que o datatype correto na tabela é DATE então (sendo que, como eu Disse, o datatype DATE no Oracle ** sempre ** inclui um porção hora/minuto/segundo, que pode ate estar zerada , mas SEMPRE vai estar presente), é o seguinte : tem sim como vc manipular uma variável DATE pra vc indicar horas/minutos/segundos, inclusive via aritmética de datas (em https://www.profissionaloracle.com.br/forums/topic/diferenca-de-data-com-horas-e-minutos/ inclusive eu mostro como), MAS a minha recomendação no seu caso é : pra ficar mais simples, eu recomendo que na sua app vc transforme as variáveis que quer usar como argumentos na query em STRINGs, e STRING no formato DD/MM/YYYY – com certeza, seja qual for a sua app, vc DEVE ter comando pra isso….
    Uma vez obtidas STRINGs (NO FORMATO DD/MM/YYYY) com a data de início e data de fim, a tua consulta fica simples…

    => primeiro, vou criar as duas variáveis string NO FORMATO CORRETO :

    scott@DESENV:SQL>variable DTEXPINI varchar2(10);
    scott@DESENV:SQL>exec :DTEXPINI := ’01/01/2021′;

    Procedimento PL/SQL concluído com sucesso.

    scott@DESENV:SQL>print DTEXPINI

    DTEXPINI

    01/01/2021

    scott@DESENV:SQL>variable DTEXPFIN varchar2(10);
    scott@DESENV:SQL>exec :DTEXPFIN := ’31/12/2021′;

    Procedimento PL/SQL concluído com sucesso.

    scott@DESENV:SQL>print DTEXPFIN

    DTEXPFIN

    31/12/2021

    ==> Ok, só pra eu poder testar, vou criar a tabela e inserir uns dados :

    scott@DESENV:SQL>create table BASEVDAS (AD_DTEXP date) ;

    Tabela criada.

    scott@DESENV:SQL>insert into BASEVDAS values (sysdate);

    1 linha criada.

    scott@DESENV:SQL>insert into BASEVDAS values (sysdate-3);

    1 linha criada.

    => OK, vamos à query, onde concateno na string dd/mm/yyyy o componente hora E então converto o valor todo para DATE :

    scott@DESENV:SQL>SELECT * FROM BASEVDAS BAS
    2 WHERE BAS.AD_DTEXP between TO_DATE(:DTEXPINI || ‘ 00:00:00’, ‘dd/mm/yyyy hh24:mi:ss’)
    3 AND TO_DATE(:DTEXPFIN || ‘ 23:59:59’, ‘dd/mm/yyyy hh24:mi:ss’)
    4 ;

    AD_DTEXP

    27/04/2021 16:47:12
    24/04/2021 16:47:25

    scott@DESENV:SQL>

    ==> Okdoc ?? Não tem como errar se fazer direito… Só Atenção, que há um ESPAÇO entre a string com dd/mm/yyyy E a string com hh:mi:ss, certo ??

    Abraços,

    Chiappa