Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/03/2012, 11:35
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Variable Moneda

Hola GABRIL:

La elección del tipo de datos dependerá de lo que necesites hacer con la información. ¿Necesitas ese dato para hacer algún tipo de cálculo? entonces si, será necesario guardar el campo de tipo de precisión para poder hacer operaciones. ¿El campo es meramente descriptivo y no requieres hacer ningún cálculo? entonces podrías optar (aunque no lo recomiendo) en ponerlo como varchar.

Hay que entender que una cosa es el dato y otra muy diferente es el formato en que presentas la información al usuario como bien comenta gnzsoloyo... Lamentablemente MySQL no cuenta con un tipo Money, como SQL Server o ACCESS pero proporciona los medios necesarios para poder manejar este tipo se situaciones. aquí algunas consideraciones que tienes que tomar en cuenta.

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla (campo_numero DECIMAL(10,2), campo_texto VARCHAR(10));
  2.  
  3. Query OK, 0 rows affected (0.14 sec)
  4.  
  5. mysql> #la información es la misma, pero el dato es diferente
  6. mysql> INSERT INTO tabla VALUES (123.30, '123.30');
  7. Query OK, 1 row affected (0.03 sec)
  8.  
  9. mysql> #La precisión del número es sifnificativa, trunca al numero de decimanes
  10. mysql> INSERT INTO tabla VALUES (12345.67891, NULL);
  11. Query OK, 1 row affected, 1 warning (0.03 sec)
  12.  
  13. mysql> #La presición en el texto no importa
  14. INSERT INTO tabla VALUES (NULL, '1234567.891');
  15.  
  16. mysql> #no puedes almacenar números con sepadador de miles
  17. mysql> INSERT INTO tabla VALUES (1,123.30, NULL);
  18. ERROR 1136 (21S01): Column count doesnt match value count at row 1
  19.  
  20. mysql> #puedes cifras con separador de miles
  21. mysql> INSERT INTO tabla VALUES (NULL, '1,123.30');
  22. Query OK, 1 row affected (0.03 sec)
  23.  
  24. mysql> #pero también ualquier cosa que no sea una cifra
  25. mysql> INSERT INTO tabla VALUES (NULL, '1D"$%D.AD');
  26. Query OK, 1 row affected (0.03 sec)
  27.  
  28. mysql> #con numeros puedes realizar operaciones
  29. mysql> SELECT campo_numero, campo_numero * 0.16 iva FROM tabla;
  30. +--------------+-----------+
  31. | campo_numero | iva       |
  32. +--------------+-----------+
  33. |       123.30 |   19.7280 |
  34. |     12345.68 | 1975.3088 |
  35. |         NULL |      NULL |
  36. |         NULL |      NULL |
  37. +--------------+-----------+
  38. 4 rows in set (0.00 sec)
  39.  
  40. mysql> #con textos, las operaciones no son matemátivas
  41. mysql> SELECT campo_texto, campo_texto * 0.16 iva FROM tabla;
  42. +-------------+-------------+
  43. | campo_texto | iva         |
  44. +-------------+-------------+
  45. | 123.30      |      19.728 |
  46. | NULL        |        NULL |
  47. | 1,123.30    |        0.16 |
  48. | 1D#$%D.AD   |        0.16 |
  49. | 12.1234567  | 1.939753072 |
  50. +-------------+-------------+
  51. 5 rows in set, 2 warnings (0.00 sec)
  52.  
  53. mysql> #puedes presentar un numero en el formato que quieres
  54. mysql> SELECT campo_numero, FORMAT(campo_numero, 2) FROM tabla;
  55. +--------------+-------------------------+
  56. | campo_numero | FORMAT(campo_numero, 2) |
  57. +--------------+-------------------------+
  58. |       123.30 | 123.30                  |
  59. |     12345.68 | 12,345.68               |
  60. +--------------+-------------------------+
  61. 4 rows in set (0.00 sec)

Saludos
Leo.