¿Cómo comparar fechas en SQL?

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: ¿aún 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

  • Por favor edite y etiquete su pregunta para decirnos qué producto de base de datos está utilizando (por ejemplo, MySQL y versión). Además, dado que siempre es mejor almacenar las fechas como dates en lugar de cadenas, ¿hay alguna razón por la que no pueda cambiar la definición de la tabla ahora? ¿O también está pidiendo ayuda para hacer eso?
  • ¿Puede cambiar el atributo de fecha a fecha y hora? Almacenar fechas como varchar es problemático. Se encontrará con situaciones en las que se almacenan datos que no son una fecha válida. También convertirá continuamente desde y hacia la fecha y hora.

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 dejar: mal manejo de consultas de fechas / rangos

Comentarios

  • y ' generalmente se recomienda usar 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *