none
Comparar datas RRS feed

  • Pergunta

  • Bom dia!

    Precisando de uma ajudinha.

    Tenho um campo tipo varchar DATAF (Data fim existência ele determina o fim da existência de uso desse valor no bd)

    Estou precisando criar um sql que mostre se o objeto esta ativo ou não de acordo com esse camo DATF e a data atual.

    Tentei da seguinte forma porém ainda não obtive sucesso:

    SELECTCOD_CC,DESC_CTT, EMPRESA, CTT_DTEXSF, 
    (SUBSTRING(CTT_DTEXSF,7,2) + '/' + SUBSTRING(CTT_DTEXSF,5,2) + '/' + SUBSTRING(CTT_DTEXSF,1,4) ) AS DTA_FIM_EXIST, 
     convert(VARCHAR, getdate(), 103) DTA_MOD, 
    ( CASE WHEN convert(VARCHAR, getdate(), 103) >= (SUBSTRING(CTT_DTEXSF,7,2) + '/' + SUBSTRING(CTT_DTEXSF,5,2) + '/' + SUBSTRING(CTT_DTEXSF,1,4) ) THEN 'BLOQ'
    ELSE 'ATIV' END ) AS STATUS_A,
     GETDATE() AS DATA
    FROM  OBJETOS_T 
    Alguém poderia me ajudar?

    quinta-feira, 15 de dezembro de 2016 13:36

Respostas

  • Bom dia,

    A data está gravada no campo varchar no formato aaaammdd?

    Se estiver experimente fazer uns testes dessa forma:

    SELECT
        COD_CC,
        DESC_CTT, 
        EMPRESA, 
        CTT_DTEXSF, 
        SUBSTRING(CTT_DTEXSF,7,2) + '/' + SUBSTRING(CTT_DTEXSF,5,2) + '/' + SUBSTRING(CTT_DTEXSF,1,4) AS DTA_FIM_EXIST, 
        convert(VARCHAR, getdate(), 103) DTA_MOD, 
        CASE WHEN convert(VARCHAR, getdate(), 112) >= CTT_DTEXSF 
            THEN 'BLOQ'
            ELSE 'ATIV' 
        END  AS STATUS_A,
        GETDATE() AS DATA
    FROM OBJETOS_T

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta carine.couto quinta-feira, 15 de dezembro de 2016 16:09
    quinta-feira, 15 de dezembro de 2016 13:45
  • De uma revisão no seu código , vc  tem trechos repetidos

    ( SUBSTRING(CTT_DTEXSF, 7, 2) + '/' + SUBSTRING(CTT_DTEXSF, 5, 2)
              + '/' + SUBSTRING(CTT_DTEXSF, 1, 4) ) AS DTA_FIM_EXIST ,

    >= ( SUBSTRING(CTT_DTEXSF,7, 2) + '/' + SUBSTRING(CTT_DTEXSF,5, 2) + '/'  + SUBSTRING(CTT_DTEXSF,
                                                                  1, 4) )

    quando  envolver cálculos encima de campos calculados 

    divida para conquistar

    1) Exemplo

    --Passo 1
     --crie uma CTE
    
    WITH    CTE
              AS ( SELECT    COD_CC AS COD_CC ,
                            DESC_CTT  AS DESC_CTT,
                            EMPRESA  AS EMPRESA,
                            CTT_DTEXSF AS CTT_DTEXSF ,
                            ( SUBSTRING(CTT_DTEXSF, 7, 2) + '/'
                              + SUBSTRING(CTT_DTEXSF, 5, 2) + '/'
                              + SUBSTRING(CTT_DTEXSF, 1, 4) ) AS DTA_FIM_EXIST ,
                            CONVERT(VARCHAR, GETDATE(), 103) AS  DTA_MOD ,                       
                            GETDATE() AS DATA
                   FROM     OBJETOS_T
                 )
            SELECT CTE.COD_CC ,
                   CTE.DESC_CTT ,
    			   CTE.EMPRESA ,
    			   CTE.CTT_DTEXSF ,
    			   CTE.DTA_FIM_EXIST ,
                   CTE.DTA_MOD,
    			   CTE.DATA,
    			   [Status] = IIF(DTA_MOD >= DTA_FIM_EXIST ,'BLOQ' ,'ATIV')
    			    FROM CTE
    
    	


    Wesley Neves

    • Marcado como Resposta carine.couto terça-feira, 3 de janeiro de 2017 16:31
    quinta-feira, 15 de dezembro de 2016 13:55

Todas as Respostas

  • Olá,

    Pelo que deu pra perceber, o seu campo DATEF vem nesse formato: '20161215', correto?

    Você tem que ter a data atual e a sua data no mesmo tipo de dados (nesse caso DATE) para poder comparar.

    Pois bem, tente fazer dessa maneira:

    SELECT COD_CC,DESC_CTT, EMPRESA, CTT_DTEXSF, 
           CONVERT(DATE, SUBSTRING(CTT_DTEXSF,7,2) + '/' + SUBSTRING(CTT_DTEXSF,5,2) + '/' + SUBSTRING(CTT_DTEXSF,1,4), 103) AS DTA_FIM_EXIST, 
           CONVERT(VARCHAR, getdate(), 103) DTA_MOD, 
           (CASE WHEN CONVERT(DATE, getdate(), 103) >= CONVERT(DATE, SUBSTRING(CTT_DTEXSF,7,2) + '/' + SUBSTRING(CTT_DTEXSF,5,2) + '/' + SUBSTRING(CTT_DTEXSF,1,4), 103) THEN 'BLOQ'
    ELSE 'ATIV' END) AS STATUS_A,
           GETDATE() AS DATA
    FROM  OBJETOS_T 

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quinta-feira, 15 de dezembro de 2016 13:45
  • Bom dia,

    A data está gravada no campo varchar no formato aaaammdd?

    Se estiver experimente fazer uns testes dessa forma:

    SELECT
        COD_CC,
        DESC_CTT, 
        EMPRESA, 
        CTT_DTEXSF, 
        SUBSTRING(CTT_DTEXSF,7,2) + '/' + SUBSTRING(CTT_DTEXSF,5,2) + '/' + SUBSTRING(CTT_DTEXSF,1,4) AS DTA_FIM_EXIST, 
        convert(VARCHAR, getdate(), 103) DTA_MOD, 
        CASE WHEN convert(VARCHAR, getdate(), 112) >= CTT_DTEXSF 
            THEN 'BLOQ'
            ELSE 'ATIV' 
        END  AS STATUS_A,
        GETDATE() AS DATA
    FROM OBJETOS_T

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta carine.couto quinta-feira, 15 de dezembro de 2016 16:09
    quinta-feira, 15 de dezembro de 2016 13:45
  • De uma revisão no seu código , vc  tem trechos repetidos

    ( SUBSTRING(CTT_DTEXSF, 7, 2) + '/' + SUBSTRING(CTT_DTEXSF, 5, 2)
              + '/' + SUBSTRING(CTT_DTEXSF, 1, 4) ) AS DTA_FIM_EXIST ,

    >= ( SUBSTRING(CTT_DTEXSF,7, 2) + '/' + SUBSTRING(CTT_DTEXSF,5, 2) + '/'  + SUBSTRING(CTT_DTEXSF,
                                                                  1, 4) )

    quando  envolver cálculos encima de campos calculados 

    divida para conquistar

    1) Exemplo

    --Passo 1
     --crie uma CTE
    
    WITH    CTE
              AS ( SELECT    COD_CC AS COD_CC ,
                            DESC_CTT  AS DESC_CTT,
                            EMPRESA  AS EMPRESA,
                            CTT_DTEXSF AS CTT_DTEXSF ,
                            ( SUBSTRING(CTT_DTEXSF, 7, 2) + '/'
                              + SUBSTRING(CTT_DTEXSF, 5, 2) + '/'
                              + SUBSTRING(CTT_DTEXSF, 1, 4) ) AS DTA_FIM_EXIST ,
                            CONVERT(VARCHAR, GETDATE(), 103) AS  DTA_MOD ,                       
                            GETDATE() AS DATA
                   FROM     OBJETOS_T
                 )
            SELECT CTE.COD_CC ,
                   CTE.DESC_CTT ,
    			   CTE.EMPRESA ,
    			   CTE.CTT_DTEXSF ,
    			   CTE.DTA_FIM_EXIST ,
                   CTE.DTA_MOD,
    			   CTE.DATA,
    			   [Status] = IIF(DTA_MOD >= DTA_FIM_EXIST ,'BLOQ' ,'ATIV')
    			    FROM CTE
    
    	


    Wesley Neves

    • Marcado como Resposta carine.couto terça-feira, 3 de janeiro de 2017 16:31
    quinta-feira, 15 de dezembro de 2016 13:55
  • Obrigada!

    Deu certo!

    quinta-feira, 15 de dezembro de 2016 16:09
  • Obrigada!

    Deu certo!
    quinta-feira, 15 de dezembro de 2016 16:09
  • Deleted
    quinta-feira, 15 de dezembro de 2016 19:51