Usuário com melhor resposta
BETWEEN mesI/anoI AND mesF/anoF

Pergunta
-
Como fazer um BETWEEN em uma data usando apenas o mês e o ano?
Exemplo: Entre 10/2011 e 09/2012
Tentei fazer o BETWEEN separadamente para o mês e o ano, porém, como no caso acima, o mês inicial é maior que o mês final, ou seja não retorna valores.
[b]Sergio Ivanenko[/b]
- Editado Ivanenko quarta-feira, 10 de outubro de 2012 03:53
Respostas
-
Ivanenko, isto depende de qual o tipo de dados voce esta usando na coluna da sua data, se for um tipo char, varchar ou inteiro no formato AAAAMMDD voce pode usar um left de 6, se for tipo date ou datetime voce tem que fazer uma conversão para conveguir, no exemplo abaixo teria uma coluna do tipo smalldatetime, onde converto para o formato aaaammdd e pegou o left 6 que seria o ano e mes, tente desta forma.
select * from tabela where left(convert(char(8), data,112),6) between '201110' and '201209'
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Alexandre Matayosi quarta-feira, 10 de outubro de 2012 09:59
- Marcado como Resposta Ivanenko quarta-feira, 10 de outubro de 2012 12:02
Todas as Respostas
-
Ivanenko, isto depende de qual o tipo de dados voce esta usando na coluna da sua data, se for um tipo char, varchar ou inteiro no formato AAAAMMDD voce pode usar um left de 6, se for tipo date ou datetime voce tem que fazer uma conversão para conveguir, no exemplo abaixo teria uma coluna do tipo smalldatetime, onde converto para o formato aaaammdd e pegou o left 6 que seria o ano e mes, tente desta forma.
select * from tabela where left(convert(char(8), data,112),6) between '201110' and '201209'
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Alexandre Matayosi quarta-feira, 10 de outubro de 2012 09:59
- Marcado como Resposta Ivanenko quarta-feira, 10 de outubro de 2012 12:02
-
-
Neste caso, aconselharia a ter colunas separadas para mês e ano. Isso permitiria aplicar o between sem ter que utilizar funções no Where. Usando funções você corre o risco de "bloquear" a utilização de índices por parte do SQL.
Cuidado com a utilização de funções em consultas.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
Robertson.
Analisei a sua sugestão, e mudei o código. O usuário ao acionar a consulta irá informar o período em mês/ano, porém a mesma será executada no formato date, ou seja:
mesAnoInicial: 1 & "/" & mesInformado & "/" & anoInformado
Para o período final, criei uma função que retorna o último dia do mês informado. No caso de fevereiro, verifica se o ano informado é bisexto, se sim retorna 29, se não 28.
mesAnoFinal: rotinaUltimoDia(mesInformado) & "/" & mesInformado & "/" & anoInformado
Converto para date e executo a consulta.
Na prática foi preciso criar duas variaveis no aplicativo e mais a função, mas tenho a segurança que terei o retorno correto da consulta.
Obrigado.
[b]Sergio Ivanenko[/b]