Compare datas no MySQL

92

Eu quero comparar uma data de um banco de dados que está entre 2 datas fornecidas. A coluna do banco de dados é DATETIME e desejo compará-la apenas ao formato de data, não ao formato de data e hora.

SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10'

Recebo este erro quando executo o SQL acima:

Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MySQL para obter a sintaxe correta para usar próximo a 'us_reg_date, 120)> =' 2000-07-05 'AND CONVERT (CHAR (10), us_reg_date, 120) <=' 2011- 'em linha 1

Como esse problema pode ser resolvido?

NVG
fonte

Respostas:

94

Você pode tentar a consulta abaixo,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)
Nik
fonte
37
Para pessoas que vêm do google: o tipo de data em mysql vem no formato aaaa-mm-dd.
Błażej Michalik
86

Essa é a sintaxe do SQL Server para converter uma data em uma string. No MySQL, você pode usar a função DATE para extrair a data de um datetime:

SELECT *
FROM players
WHERE DATE(us_reg_date) BETWEEN '2000-07-05' AND '2011-11-10'

Mas se você quiser tirar proveito de um índice na coluna, us_reg_datepode tentar o seguinte:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day
Mark Byers
fonte
1
Agradeço sua consideração em tirar proveito do índice. Acho que a consulta não deve ter a cláusula "+ intervalo 1 dia".
Jurgenfd
10

Isso funciona para mim:

select date_format(date(starttime),'%Y-%m-%d') from data
where date(starttime) >= date '2012-11-02';

Observe a string de formato '% Y-% m-% d' e o formato da data de entrada.

Rahatur
fonte
6

Ei pessoal, obrigado pela ajuda, eu tenho a resposta.

aqui está o código .......

SELECT * FROM table
WHERE STR_TO_DATE(column, '%d/%m/%Y')
  BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
    AND STR_TO_DATE('07/10/15', '%d/%m/%Y')
Gurjeet Singh
fonte
2

isso é o que funcionou para mim:

select * from table
where column
BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
 AND STR_TO_DATE('07/10/15', '%d/%m/%Y')

Por favor, note que eu tive que mudar STR_TO_DATE (coluna, '% d /% m /% Y') das soluções anteriores, pois estava demorando muito para carregar

Iria
fonte