En una tabla de base de datos he creado un atributo de fecha, pero he establecido su tipo en varchar
y no Date
. Mi pregunta es: ¿todavía podré comparar esas fechas en una consulta SQL?
Las fechas en mi base de datos se almacenan en este formato:
dd / mm / aaaa hh: mm: ss
Tengo que hacer una consulta SQL en PHP que se parece a esto:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
«date» se ve así: 07/08/2015 15:15:02
Agradecería un ejemplo de cómo para hacer esto.
Comentarios
Respuesta
Dependiendo de la base de datos que esté utilizando, deberías poder convertir la cadena en una fecha y luego hacer tu comparación.
es decir en Sql Server
cast(date as datetime) >= "20150131" ...
Dicho esto, normalmente recomendaría almacenar la fecha como una fecha si es posible, y si necesita usar cadenas, Sería mejor utilizar un formato más estandarizado
es decir "YYYY-mm-dd"
o incluso mejor "YYYYmmdd"
en lugar de "mm/dd/YYYY"
que, por ejemplo, se puede mezclar fácilmente con "dd/mm/YYYY"
que es común en muchas culturas. Vea esta publicación de blog: Malos hábitos que eliminar: mal manejo de consultas de fecha / rango
Comentarios
- y ' se suele recomendar utilizar un formato estándar para las fechas, como
'YYYY-mm-dd'
o incluso mejor'YYYYmmdd'
y no el'mm/dd/YYYY'
que es ambiguo y su interpretación por SQL-Server depende de la configuración local. - @ypercube, de acuerdo , actualizado.
Respuesta
Hay una pregunta de «¿Qué base de datos está usando?»
Cada RDBMS tiene su propia forma de manejar el problema.
Si es MySQL, use str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Esto convertirá un varchar en una fecha y hará posible ordenar la fecha correctamente. Ordenar una fecha como un tipo de datos varchar conducirá a un comportamiento inesperado.
dates
en lugar de cadenas, ¿hay alguna razón por la que no puede cambiar la definición de la tabla ahora? ¿O también está pidiendo ayuda para hacer eso?