Em SQL como comparar os valores de data?
Usando a sintaxe MySQL e tendo uma tabela com uma linha como:
mydate DATETIME NULL,
Há uma maneira de fazer algo como:
... WHERE mydate<='2008-11-25';
Estou a tentar, mas não estou a fazê-lo funcionar.
5 answers
Uh, WHERE mydate<='2008-11-25'
é a maneira de o fazer. Deve funcionar.
Edite: o seguinte funciona bem para mim no MySQL 5.x
create temporary table foo(d datetime);
insert into foo(d) VALUES ('2000-01-01');
insert into foo(d) VALUES ('2001-01-01');
select * from foo where d <= '2000-06-01';
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
Na sintaxe SQL padrão, você usaria:
WHERE mydate <= DATE '2008-11-20'
Isto é, a data da palavra-chave deve preceder o texto. Em alguns DBMS, no entanto, você não precisa ser tão explícito; o sistema irá converter a coluna de data em uma string, ou a string em um valor de data, automaticamente. Existem nominalmente algumas implicações interessantes se a data for convertida em uma string - se você tiver datas no primeiro milênio (0001-01-01 .. 0999-12-31) e o(S) zero (S) inicial (s) são omitidos por o sistema de formatação.
Pode adicionar o componente de tempo
WHERE mydate<='2008-11-25 23:59:59'
Mas isso pode falhar nas datas de transferência do DST se a minha data for 2008-11-25 24: 59: 59, por isso é provavelmente mais seguro apanhar tudo antes da próxima data.
WHERE mydate < '2008-11-26 00:00:00'
O teu problema pode ser que estejas a lidar com dados DATETIME, não apenas datas. Se uma linha tem uma data minha que é '2008-11-25 09:30 AM', então o seu onde a minha data não vai devolver essa fila. "2008-11-25" tem uma hora implícita de 00: 00 (meia-noite), por isso, mesmo que a parte da data é a mesma, eles não são iguais, e o meu encontro é maior.
Se usares