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?

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)

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

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.


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.