Usuário com melhor resposta
Comparar datas

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?
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
-
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
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- Editado André SeccoMVP quinta-feira, 15 de dezembro de 2016 13:46
-
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
-
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
-
-
-