Comparar fechas en MySQL

95

Quiero comparar una fecha de una base de datos que se encuentra entre 2 fechas determinadas. La columna de la base de datos es DATETIME, y quiero compararla solo con el formato de fecha, no con el formato de fecha y 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'

Recibo este error cuando ejecuto el SQL anterior:

Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'us_reg_date, 120)> =' 2000-07-05 'AND CONVERT (CHAR (10), us_reg_date, 120) <=' 2011- 'at línea 1

¿Cómo se puede solucionar este problema?

NVG
fuente

Respuestas:

95

Puedes probar la siguiente consulta,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)
Nik
fuente
39
Para las personas que vienen de google: el tipo de fecha en mysql viene en formato aaaa-mm-dd.
Błażej Michalik
89

Esa es la sintaxis de SQL Server para convertir una fecha en una cadena. En MySQL puede usar la función FECHA para extraer la fecha de una fecha y hora:

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

Pero si desea aprovechar un índice en la columna, us_reg_datees posible que desee probar esto en su lugar:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day
Mark Byers
fuente
1
Agradezco su consideración de aprovechar el índice. Creo que la consulta no debería tener la cláusula "+ intervalo 1 día".
Jurgenfd
10

Esto funciona para mi:

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

Tenga en cuenta la cadena de formato '% Y-% m-% d' y el formato de la fecha de entrada.

Rahatur
fuente
6

Tengo la respuesta.

Aquí está el 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
fuente
2

esto es lo que funcionó para mí:

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')

Tenga en cuenta que tuve que cambiar STR_TO_DATE (columna, '% d /% m /% Y') de las soluciones anteriores, ya que estaba tardando años en cargarse

Iria
fuente