Duvida Between

9 respostas
Tiago_Casanova

Bom dia, estou com o seguinte problema a instrução a seguir :

esta me retornando todos os estudantes que estão com situação=0(false) e que estão entre duas data.
O problema é que não esta retornando os estudantes com a data 2011-12-29 ele ta pegando somente até o dia 28. O seria o problema???

9 Respostas

mauricioadl

entenda que o between usa < e nao <=, ou seja, vai trazer sempre o valor que vc colocar -1.

isso pode mudar tambem de acordo com o banco q vc estiver usando.

Tiago_Casanova

um valeu mauricioadl, no meu caso estou usando o mysql, vc saberia se tem outra forma de fazer isso???

mauricioadl

usa o comparador normal tipo:

where sua_dada >= 10/01/2011 AND sua_data <= 10/12/2011

[]'s

Tiago_Casanova

tinha tentado assim
SELECT * FROM students WHERE (created_at >= ‘2011-06-01’ and created_at <= ‘2011-12-29’)

mas tbm nao deu, continua nao pegando os estudantes com a data 2011-12-29, no banco o campo esta como datatime.

mauricioadl

se estiver com datetime nao vai encontrar mesmo, prq vai ter valores de horario tbm. entao vc precisa eh "truncar" a data. nunca usei isso no mysql, porem achei no google que eh feito da seguinte forma.

DATE_FORMAT(date_time_var, ‘%Y-%m-%d’)

vai ficar tipo assim:

SELECT * FROM students
WHERE (DATE_FORMAT(created_at , ‘%Y-%m-%d’) >= '2011-06-01’
and
DATE_FORMAT(created_at , ‘%Y-%m-%d’) <= ‘2011-12-29’)

Cabazzo

O formato do DATETIME é ‘YYYY-MM-DD HH:MM:SS’, então se vc omite as horas/minutos/segundos ele supõe que seja a primeira hora do dia 00:00:00, ou vc muda o campo para DATE, ou coloca no between a parte das horas.

Tiago_Casanova

Valeu mauricioadl era isso mesmo deu certo…Abraço

gfkauer

mauricioadl:
entenda que o between usa < e nao <=, ou seja, vai trazer sempre o valor que vc colocar -1.

isso pode mudar tambem de acordo com o banco q vc estiver usando.

Apenas uma leve correção, o between trabalha com <= e >= ! O problema é as horas salvas no banco.

E

uma coisa, é recomendável você adicionar um dia na data, pois com o date_format você converte em string, além de poder ter algum inconveniente (por comparar duas strings ao invés de datas), a consulta fica mais lenta, pois comparar string é muito mais pesado que comparar datas.

Fiz um teste rápido e dessa forma consegui truncar a data no mysql:

Possivelmente tem um desempenho melhor que comparar strings.

Criado 30 de dezembro de 2011
Ultima resposta 30 de dez. de 2011
Respostas 9
Participantes 5