Usuário com melhor resposta
Ajuda com SELECT em campo DATETIME desconsiderando a DATA...

Pergunta
-
Olá amigos do MSND!
Preciso da ajuda de vcs para criar uma query que me retorne a quantidade de registros em intervalo de horas em um campo datetime DESCONSIDERANDO A DATA.EX: Preciso saber quantos registros tenho entre as 19:00:00 e 23:59:59 hs, INDEPENDENTE DA DATA.
Me parece simples, mas nao estou conseguindo.
segue meu select atual que esta trazendo todos os registros por causa da DATA:
SELECT COUNT(COLETA_ID) AS HORARIO_NOBRE
FROM ColetaCustoPrograma
WHERE (DATA_INICIO >= @DATA_INICIO) AND (DATA_FIM <= @DATA_FIM)Ficou claro? ou ta confuso?
Para ajudar a interpretação segue meu "CENÁRIO":
Tenho um sistema de monitoramento de comerciais de TV. Preciso criar um relatório informando a quantidade de VEICULAÇÕES dentro do horário nobre que seria entre as 19:00:00 ate as 23:00:00.
Respostas
-
Boa tarde,
Se você estiver utilizando o SQL Server 2008 ou mais recente pode fazer um Cast para Time. Ex:
where CAST(DATA_INICIO AS TIME) >= @HORA_INICIO AND CAST(DATA_FIM AS TIME) <= @HORA_FIM
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Mario CBA segunda-feira, 2 de março de 2015 21:10
-
Mario,
Tenta utilizar o CONVERT para converter tua data em horas e utilizar no WHERE
CONVERT(TIME,GETDATE())
Vai te retornar apenas as horas:minutos:segundos aí ocê pode colocar o intervalo no BETWEEN do teu WHERE mais ou menos assim:
SELECT COUNT(COLETA_ID) AS HORARIO_NOBRE FROM ColetaCustoPrograma WHERE (CONVERT(TIME,DATA_INICIO) >= CONVERT(TIME,@DATA_INICIO)) AND (CONVERT(TIME,DATA_FIM) <= CONVERT(TIME,@DATA_FIM))
Espero que o ajude.
[MCP | MCSA Microsoft SQL Server 2012 | MCTS Microsoft Dynamics CRM 2011]
- Sugerido como Resposta William John Adam Trindade segunda-feira, 2 de março de 2015 20:55
- Marcado como Resposta Mario CBA segunda-feira, 2 de março de 2015 21:08
-
Para isso vc tem que extrair a parte tempo do seu campo data,
isso é feito forçando (cast) o campo data a ser do tipo TIME
tente assim:
SELECT COUNT(COLETA_ID) AS HORARIO_NOBRE FROM ColetaCustoPrograma WHERE cast(DATA_INICIO as time) >= @DATA_INICIO) AND (cast(DATA_FIM as time) <= @DATA_FIM)
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Mario CBA segunda-feira, 2 de março de 2015 21:10
Todas as Respostas
-
Mario,
Tenta utilizar o CONVERT para converter tua data em horas e utilizar no WHERE
CONVERT(TIME,GETDATE())
Vai te retornar apenas as horas:minutos:segundos aí ocê pode colocar o intervalo no BETWEEN do teu WHERE mais ou menos assim:
SELECT COUNT(COLETA_ID) AS HORARIO_NOBRE FROM ColetaCustoPrograma WHERE (CONVERT(TIME,DATA_INICIO) >= CONVERT(TIME,@DATA_INICIO)) AND (CONVERT(TIME,DATA_FIM) <= CONVERT(TIME,@DATA_FIM))
Espero que o ajude.
[MCP | MCSA Microsoft SQL Server 2012 | MCTS Microsoft Dynamics CRM 2011]
- Sugerido como Resposta William John Adam Trindade segunda-feira, 2 de março de 2015 20:55
- Marcado como Resposta Mario CBA segunda-feira, 2 de março de 2015 21:08
-
Boa tarde,
Se você estiver utilizando o SQL Server 2008 ou mais recente pode fazer um Cast para Time. Ex:
where CAST(DATA_INICIO AS TIME) >= @HORA_INICIO AND CAST(DATA_FIM AS TIME) <= @HORA_FIM
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Mario CBA segunda-feira, 2 de março de 2015 21:10
-
Para isso vc tem que extrair a parte tempo do seu campo data,
isso é feito forçando (cast) o campo data a ser do tipo TIME
tente assim:
SELECT COUNT(COLETA_ID) AS HORARIO_NOBRE FROM ColetaCustoPrograma WHERE cast(DATA_INICIO as time) >= @DATA_INICIO) AND (cast(DATA_FIM as time) <= @DATA_FIM)
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Mario CBA segunda-feira, 2 de março de 2015 21:10
-
-
-
-
Maria,
Um detalhe é importante destacar quando utilizamos o Convert ou Cast na claúsula forçando a conversão de forma implícita o SQL Server será obrigado a mudar a sua forma de obtenção e apresentação dos dados, com isso, o plano de execução sofrerá impactos que em muitos casos poderá proporcionar em alguns casos um custo maior de processamento dos dados.
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]