Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/03/2012, 10:39
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 1.946
Antigüedad: 7 años, 11 meses
Puntos: 414
Respuesta: Select con fecha

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.