2011-05-24 15 views
6

Las fechas se almacenan en DB como tales: "2011-05-26 11:00:00" en un campo de fecha y hora. Me gustaría encontrar todas las filas donde la fecha sea mayor que la primera de este mes, es decir: 2011-05-01 09:00:00comparación de fechas MySQL

Los formatos de fecha en la base de datos no se pueden cambiar. ¿Qué función de MySQL puedo usar para convertir la fecha en la base de datos a un formato que pueda manejar la comparación? Supongo que el mejor formato para "el primero del mes" es una marca de tiempo Unix?

Los valores de tiempo en las fechas están siempre presentes pero solo en horario de oficina, por lo tanto, de 09:00 a 17:00.

+0

¿Qué quiere decir con "este mes"? ¿Debería considerarse esto como el mes actual? –

+0

Sí, el mes actual – stef

+0

Publicado en la pregunta incorrecta. –

Respuesta

12

Si se almacena en un campo DATETIME, solo consulta en WHERE date > '2011-05-01 09:00:00'.

+0

@deceze ... ¿Qué pasa si la fecha se genera dinámicamente? Si la siguiente fecha de tiempo es id 2001-06-12 05:00:00? ¿Cómo calcularás la primera fecha de esta fecha? –

+0

@Awais Esa es una pregunta bastante diferente, pero no es difícil encontrar el primero del mes en PHP y formatearlo con 'date ('Y-m-d H: i: s')'. Ver la respuesta de @George. – deceze

+0

Gracias amigo, lo he entendido por la respuesta de George. –

4
$firstDayOfMonth = date('Y-m-d H:i:s', mktime(0,0,0,date('n'),1,date('Y')); 
$query = "SELECT * FROM `table` WHERE `date` >= '$firstDayOfMonth'"; 
2

¿Algo como esto quizás?

$oDateTime = new DateTime(); 
$sQuery = "SELECT * FROM table WHERE date >= ".$oDateTime->format("Y-m")."-01 09:00:00"; 
0

comparar con la fecha y hora directamente:

WHERE date_field >= '2011-05-01 00:00:00' 
0

puede utilizar la función TIMESTAMPDIFF en MySQL para comparar el tiempo,
función FROM_UNIXTIME para formatear marca de tiempo Unix como la fecha.

Más funciones de datos y tiempos de mysql y ejemplos están disponibles en MySQL Reference Manual date and time function.

0

DATETIME campos pueden filtrada al igual que los campos de enteros, ejemplo:

SELECT * FROM `table` WHERE `date` > '2011-05-01 09:00:00' 

En caso de que realmente desea convertir a las marcas de tiempo Unix, echar un vistazo a la función UNIX_TIMESTAMP.

0

creo que se puede resolver, algo como esto:

en primer lugar, crear el primer día del mes en formato MySQL en PHP

$firsDay = date('Y-m-d 00:00:00', strtotime(date('Y-m').'-01 00:00:00')); 

y luego, lo utilizan en la consulta

select * from something where date >= $firsDay 
Cuestiones relacionadas