validar una rango por mes hacer fechas fecha entre consulta con comparar busqueda buscar mysql phpmyadmin

mysql - rango - ¿Cómo puedo consultar entre dos fechas con el campo ''fecha'' como una cadena?



hacer una busqueda por fechas en php (3)

Tengo una tabla en una base de datos MySQL con un campo llamado ''Fecha'', el problema es que la fecha está en el formato DD-MM-YYYY, así que no puedo subirlo a MySQL como campo de tipo FECHA. En cambio, el tipo de campo es una cadena. Con esto en mente, ¿cómo puedo escribir la consulta que dará este efecto?

SELECT * FROM `table` WHERE (date_field BETWEEN ''2010-01-30'' AND ''2010-09-29'')

Teniendo en cuenta ''date_field'' no es de tipo DATE, sino string.


Arregla la mesa!

  1. Agregue una nueva columna del tipo de datos DATE apropiado:

    ALTER TABLE `table` ADD new_date_field DATE AFTER date_field;

  2. Use la función STR_TO_DATE() MySQL para rellenar esa nueva columna con las fechas STR_TO_DATE() en la columna anterior:

    UPDATE `table` SET new_date_field = STR_TO_DATE(date_field, ''%d-%m-%Y'');

  3. Suelta la columna anterior (y, si así lo deseas, cambia el nombre de la nueva en su lugar):

    ALTER TABLE `table` DROP date_field, CHANGE new_date_field date_field DATE;

  4. Cambie su aplicación para usar esta nueva columna.


Después de haber trabajado con Dates en varios formatos, he encontrado que es mejor volver al formato de la base de datos o a su propio formato consistente para procesarlo. Una opción que usamos es nuestro propio formato de fecha y hora, que es simplemente AAAAMMDDhhmmss, que siempre se ordena correctamente para años bisiestos, etc ... y facilita el análisis de datos. A continuación, podemos mostrar el formato en la vista deseada del usuario, sin ningún problema.

Si bien esta no es una respuesta directa a su pregunta, descubrí que esto ahorra mucho tiempo y problemas al procesar formatos de fecha y hora de diferentes países. También tendemos a ahorrar tiempo en Zulú.


SELECT * FROM `table` WHERE str_to_date(date_field, ''%d-%m-%Y'') BETWEEN ''2010-01-30'' AND ''2010-09-29''

Ejemplo SQLFiddle

Editar

También puedes hacer esto:

SELECT * FROM `table` WHERE cast(substring(date_field, 7, 4) as unsigned) * 10000 + cast(substring(date_field, 4, 2) as unsigned) * 100 + cast(substring(date_field'', 1, 2) as unsigned) BETWEEN 20100130 AND 20100929