2010-09-06 28 views
57

Quiero comparar una fecha de una base de datos que está entre 2 fechas determinadas. La columna de la base de datos es DATETIME, y quiero compararla únicamente con el formato de fecha, no con el formato de fecha y hora.Comparar fechas en MySQL

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' 

me sale este error cuando ejecuto el SQL anterior:

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

¿Cómo se puede reparar este problema?

Respuesta

58

Usted puede tratar por debajo de consulta,

select * from players 
where 
    us_reg_date between '2000-07-05' 
and 
    DATE_ADD('2011-11-10',INTERVAL 1 DAY) 
+12

Para las personas que provienen de google: el tipo de fecha en mysql viene en formato aaaa-mm-dd. –

67

Eso es SQL Server syntax para convertir una fecha en una cadena. En MySQL puede utilizar la función DATE para extraer la fecha a partir de una fecha y hora:

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

Pero si usted desea tomar ventaja de un índice en la columna us_reg_date es posible que desee probar este 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 al aprovechar el índice. Creo que la consulta no debería tener la cláusula "+ intervalo 1 día". – Jurgenfd

6

Esto funciona para mí:

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.

5

Hola chicos gracias por su ayuda, obtuve la respuesta.

Este es 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') 
0

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

Por favor, tenga en cuenta que tenía que cambiar STR_TO_DATE (columna, ' % d /% m /% Y ') de soluciones anteriores, ya que tardaba años en cargar