Ver Mensaje Individual
  #5 (permalink)  
Antiguo 24/03/2012, 18:37
Avatar de bandolera
bandolera
 
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Select con fecha

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola de nuevo bandolera:

El manejo de fechas y horas en MySQL es bastante flexible, aunque esta flexibilidad no necesariamente es buena... Checa esta liga:

http://dev.mysql.com/doc/refman/5.0/es/datetime.html

Ahí podrás darte cuenta de algunas de las propiedades que tienen los tipos de dato de fecha y hora. Como te comenté, hay muchas formas de manejar estos campos sin necesidad de hacer conversiones. Checa este script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla (campo_date DATE, campo_datetime DATETIME,
  2.     -> campo_timestamp TIMESTAMP, campo_time TIME);
  3. Query OK, 0 rows affected (0.11 sec)
  4.  
  5. mysql> INSERT INTO tabla VALUES
  6.     -> ('2012-03-19', '2012-03-19 09:10:00', NOW(), '09:10:00'),
  7.     -> (CURDATE(), '2012-03-20 09:10:00', NOW(), CURTIME()),
  8.     -> (STR_TO_DATE('03&&2012//20', '%m&&%Y//%d'), NOW(), NOW(), '09:10:00'),
  9.     -> ('20120321', '2012@03@20 09@10@00', '2012-03-20 09:10:00', '091000');
  10. Query OK, 4 rows affected (0.03 sec)
  11. Records: 4  Duplicates: 0  Warnings: 0
  12.  
  13. mysql> SELECT * FROM tabla;
  14. +------------+---------------------+---------------------+------------+
  15. | campo_date | campo_datetime      | campo_timestamp     | campo_time |
  16. +------------+---------------------+---------------------+------------+
  17. | 2012-03-19 | 2012-03-19 09:10:00 | 2012-03-20 09:26:44 | 09:10:00   |
  18. | 2012-03-20 | 2012-03-20 09:10:00 | 2012-03-20 09:26:44 | 09:26:44   |
  19. | 2012-03-20 | 2012-03-20 09:26:44 | 2012-03-20 09:26:44 | 09:10:00   |
  20. | 2012-03-21 | 2012-03-20 09:10:00 | 2012-03-20 09:10:00 | 09:10:00   |
  21. +------------+---------------------+---------------------+------------+
  22. 4 rows in set (0.00 sec)
  23.  
  24. mysql> SELECT * FROM tabla WHERE campo_date >= '2012-03-20';
  25. +------------+---------------------+---------------------+------------+
  26. | campo_date | campo_datetime      | campo_timestamp     | campo_time |
  27. +------------+---------------------+---------------------+------------+
  28. | 2012-03-20 | 2012-03-20 09:10:00 | 2012-03-20 09:26:44 | 09:26:44   |
  29. | 2012-03-20 | 2012-03-20 09:26:44 | 2012-03-20 09:26:44 | 09:10:00   |
  30. | 2012-03-21 | 2012-03-20 09:10:00 | 2012-03-20 09:10:00 | 09:10:00   |
  31. +------------+---------------------+---------------------+------------+
  32. 3 rows in set (0.00 sec)
  33.  
  34. mysql> SELECT * FROM tabla
  35.     -> WHERE campo_datetime >= '2012@03@20 09*20*00';
  36. +------------+---------------------+---------------------+------------+
  37. | campo_date | campo_datetime      | campo_timestamp     | campo_time |
  38. +------------+---------------------+---------------------+------------+
  39. | 2012-03-20 | 2012-03-20 09:26:44 | 2012-03-20 09:26:44 | 09:10:00   |
  40. +------------+---------------------+---------------------+------------+
  41. 1 row in set (0.00 sec)
  42.  
  43. mysql> SELECT * FROM tabla
  44.     -> WHERE campo_timestamp >=
  45.     -> STR_TO_DATE('2012!03?20 09(20)00', '%Y!%m?%d %H(%i)%s');
  46. +------------+---------------------+---------------------+------------+
  47. | campo_date | campo_datetime      | campo_timestamp     | campo_time |
  48. +------------+---------------------+---------------------+------------+
  49. | 2012-03-19 | 2012-03-19 09:10:00 | 2012-03-20 09:26:44 | 09:10:00   |
  50. | 2012-03-20 | 2012-03-20 09:10:00 | 2012-03-20 09:26:44 | 09:26:44   |
  51. | 2012-03-20 | 2012-03-20 09:26:44 | 2012-03-20 09:26:44 | 09:10:00   |
  52. +------------+---------------------+---------------------+------------+
  53. 3 rows in set (0.00 sec)
  54.  
  55. mysql> SELECT * FROM tabla WHERE campo_time > '09:10:00';
  56. +------------+---------------------+---------------------+------------+
  57. | campo_date | campo_datetime      | campo_timestamp     | campo_time |
  58. +------------+---------------------+---------------------+------------+
  59. | 2012-03-20 | 2012-03-20 09:10:00 | 2012-03-20 09:26:44 | 09:26:44   |
  60. +------------+---------------------+---------------------+------------+
  61. 1 row in set (0.02 sec)

A pesar de que MySQL te permite utilizar estas distintas formas de manejar la fecha, en lo particular y tal como te lo comenté en el post pasado SIEMPRE RECOMIENDO UTILIZAR EL FORMATO ANSI (yyyy-mm-dd hh:mi:ss), ya que este es el estándar que utilizan la mayoría de los DBMS, pero la decisión final la tienes tu.

En cuanto al comentario de tu foto, no tienes nada que agradecer... Eres linda y no se necesita ser un experto para darse cuenta de ello...

Saludo
Leo.
Si el campo es timestamp y quiero listar solo la fecha?

Código HTML:
SELECT * FROM fechas WHERE campo = '1980-01-30';
__________________
Todos somos iguales. NO! a la violencia de género.