[RESOLVIDO] MySQL + filtro por data

Boa tarde,

Gostaria que alguém me explicasse pq a instrução 1 funciona, e a instrução 2 não funciona. Pra mim simplesmente não faz sentido. Abaixo as instruções SQL em MySQL:

Instrução 1: (funciona!!!)

select data from tabela where data = '2008/02/20'

Instrução 2: (não funciona!!!)

select CAST('2008/02/20' as date) from tabela where CAST('2008/02/20' as date) = '2008/02/20'

Grata,
Renata

Boa tarde Renata,

Já testou 2008-02-20?
Fiz uma pesquisa no google e encontrei este site:
http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast

EDIT: Também reparei o uso de DATE no site, talvez possa ajudar em futuras buscas.

[quote=renatoes]Boa tarde Renata,

Já testou 2008-02-20?
Fiz uma pesquisa no google e encontrei este site:
http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast

EDIT: Também reparei o uso de DATE no site, talvez possa ajudar em futuras buscas.

[/quote]

Olá amigo!
Eu já tinha dado uma olhada nessa documentação que vc mandou… ela vem junto com o MySQL. Mas confesso que não pensei em tentar com “-”, sempre usei “/”.

Fazendo com os “-” como vc falou deu certo. Aliás, tô usando assim agora, muito obrigada.

Mas eu continuo inculcada com o assunto… poxa, nas duas instruções que coloquei não está retornando um DATE e fazendo uma comparação? Então pq em uma funciona e em outra não?! :?:

Segundo o site http://dev.mysql.com/doc/refman/5.1/en/using-date.html

[quote]
As a convenience, MySQL automatically converts a date to a number if the date is used in a numeric context (and vice versa). It is also smart enough to allow a ?relaxed? string form when updating and in a WHERE clause that compares a date to a TIMESTAMP, DATE, or DATETIME column. (?Relaxed form? means that any punctuation character may be used as the separator between parts. For example, ‘2004-08-15’ and ‘2004#08#15’ are equivalent.) MySQL can also convert a string containing no separators (such as ‘20040815’), provided it makes sense as a date.[/quote]
Creio que este relaxamento permite sua primeira instrução, mas como na segunda instrução você realiza o cast, ocorre o erro de formato.
[]'s

[quote=renatoes]Segundo o site http://dev.mysql.com/doc/refman/5.1/en/using-date.html

Segundo o site http://dev.mysql.com/doc/refman/5.1/en/using-date.html

[quote]
As a convenience, MySQL automatically converts a date to a number if the date is used in a numeric context (and vice versa). It is also smart enough to allow a ?relaxed? string form when updating and in a WHERE clause that compares a date to a TIMESTAMP, DATE, or DATETIME column. (?Relaxed form? means that any punctuation character may be used as the separator between parts. For example, ‘2004-08-15’ and ‘2004#08#15’ are equivalent.) MySQL can also convert a string containing no separators (such as ‘20040815’), provided it makes sense as a date
When you compare a DATE, TIME, DATETIME, or TIMESTAMP to a constant string with the <, <=, =, >=, >, or BETWEEN operators, MySQL normally converts the string to an internal long integer for faster comparison (and also for a bit more ?relaxed? string checking). [/quote]
Creio que este relaxamento permite sua primeira instrução, mas como na segunda instrução você realiza o cast, ocorre o erro de formato.
[]'s

EDIT: Desculpe a replicação, apertei o quote à toa

Hum, agora sim faz todo o sentido!

Obrigada pela ajuda! :wink: