/ / Mysql y la función de fecha, ¿la procesa en cada fila? - mysql, fecha

Mysql y la función de fecha, ¿lo procesa en cada fila? - mysql, fecha

Tengo una consulta que hace una búsqueda por fecha. Aquí está la cláusula WHERE:

WHERE DATE_FORMAT(listing.trackdate,"%Y-%m-%d") >= STR_TO_DATE("$search_sdate","%m/%d/%Y")

¿MySQL tiene que procesar el formato de fecha ystr_to_date para que cada fila cumpla con la cláusula where? ¿O hay una forma más optimizada de hacer eso? El campo en la tabla es un tipo de fecha y hora. Su versión de MySQL 5.x. $ search_sdate es una fecha recibida de un formulario web.

Editar: Para aclarar quiero comparar parte de la fecha.campo. El tipo de campo de fecha es una fecha y hora que almacena la fecha más la hora en que se insertó cada fila. Pero para esta cláusula particular donde solo quiero comparar la parte de la fecha del campo. Esperemos que eso lo aclare mejor, perdón por la confusión.

Respuestas

0 para la respuesta № 1

Estás haciendo la pregunta correcta. Para generalizarlo un poco, debe evitar las sentencias de SQL que incluyen operaciones de cualquier tipo en un campo de tabla de cualquier tipo. No solo agrega procesamiento para cada registro que se considera, sino que también evita que el optimizador incluya cualquier índice que incluya ese campo.

Si quieres una respuesta con un rango de veces.(diga una fecha), use "WHERE datetimefield BETWEEN (midnight and midnight)" o, más precisamente, "WHERE datetimefield> = midnight y datetimefield <nextmidnight".


1 para la respuesta № 2

Si listing.trackdate es un DATE campo, ¿por qué necesita el formato para ser comparadocon otra fecha? Parece que estás tomando un valor de fecha y convirtiéndolo en una cadena para que puedas compararlo con un valor de cadena que hayas convertido en una fecha.

La redundancia en ese enfoque debería ser, espero, evidente.

En cuanto a la primera pregunta que hagas, por supuesto. DATE_FORMAT(listing.trackdate) debe evaluarse para cada fila, ya que el valor en ese campo cambiará. Pero parece que

WHERE listing.trackdate >= STR_TO_DATE("$search_sdate","%m/%d/%Y")

debería bastar, si trackdate Es, de hecho, un campo de FECHA.


0 para la respuesta № 3

¿No puede ejecutar la cláusula WHERE sin las funciones de formato? MySQL no debería tener que formatearla correctamente para procesar una comparación. Tu formateo solo debe hacerse en SELECT