Ver Mensaje Individual
  #13 (permalink)  
Antiguo 22/05/2009, 15:45
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ingresar fecha en un campo date

Tienes un gran problema rockex, por que según entiendo en el post en que david el grande te ha asesorado, la fecha la tienes como varchar y no como date.

Yo te propongo modificar el tipo de dato de varchar a date en la tabla.
Pero para eso, debes hacer varias cosas:
Como ya hay registros en la base de datos y no se pueden perder, es necesario convertir primero estos datos a formatos que los entienda el tipo de dato date. Te muestro en un ejemplo lo que debes hacer para cumplir con exito la operación de conversión:

Código mysql:
Ver original
  1. Paso 0: Iniciar una transacción. En caso de que se haga algo mal,
  2. se puede corregir utilizando rollback.
  3.  
  4. mysql>begin;
  5.  
  6. Si algo sale mal en cualquier paso, debes digitar:
  7. mysql>rollback;
  8. Y empezar de nuevo el proceso.
  9.  
  10. Paso 1: Creo tabla con tipo de dato varchar. (Asi es como lo tienes)
  11. mysql> create table rockex(fecha varchar(10));
  12. Query OK, 0 rows affected (0.03 sec)
  13.  
  14. Paso 2: Ingreso un valor con formato (dd/mm/yyyy)
  15. mysql> insert into rockex values('20/03/2009');
  16. Query OK, 1 row affected (0.00 sec)
  17.  
  18. Paso 3: Consulta de tabla
  19. mysql> select *from rockex;
  20. +------------+
  21. | fecha      |
  22. +------------+
  23. | 20/03/2009 |
  24. +------------+
  25. 1 row in set (0.00 sec)
  26.  
  27. Paso 4: Hay que reemplazar los '/' por '.' para acomodarnos al formato EUR de
  28. la funcion get_format
  29. mysql> update rockex set fecha=replace(fecha,'/','.');
  30. Query OK, 1 row affected (0.05 sec)
  31. Rows matched: 1  Changed: 1  Warnings: 0
  32.  
  33. Paso 5: Consulta para verificar que haya quedado bien.
  34. mysql> select *from rockex;
  35. +------------+
  36. | fecha      |
  37. +------------+
  38. | 20.03.2009 |
  39. +------------+
  40. 1 row in set (0.00 sec)
  41.  
  42. Paso 6:Convertir las fechas de formato dd.mm.yyyy a formato mysql yyyy-mm-dd
  43. mysql> update rockex set fecha=str_to_date(fecha,get_format(date,'EUR'));
  44. Query OK, 1 row affected (0.00 sec)
  45. Rows matched: 1  Changed: 1  Warnings: 0
  46.  
  47. Paso7: verificar que esté bien.
  48. mysql> select *from rockex;
  49. +------------+
  50. | fecha      |
  51. +------------+
  52. | 2009-03-20 |
  53. +------------+
  54. 1 row in set (0.00 sec)
  55.  
  56. Paso 8: Cambiar el campo de varchar a date.
  57. mysql> alter table rockex modify fecha date;
  58. Query OK, 1 row affected (0.03 sec)
  59. Records: 1  Duplicates: 0  Warnings: 0
  60.  
  61. Paso 9: Verificar que todo esté bien.
  62. mysql> select *from rockex;
  63. +------------+
  64. | fecha      |
  65. +------------+
  66. | 2009-03-20 |
  67. +------------+
  68. 1 row in set (0.00 sec)
  69.  
  70. Paso 10: si todo está bien confirmamos la transacción:
  71. mysql>commit;
  72. Query OK, 0 rows affected (0.00 sec)

De esta forma no tendrás que utilizar el str_to_date para consultar la fecha, sino que puedes utilizar el between con el campo limpio.

Cualquier cosa, lo comentas.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming