Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/04/2013, 15:29
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: CAST en Mysql

Hola oscarbt

Puedo suponer que tu campo COD_PER es de tipo CADENA, es por eso que al hacer el max, te regresa 9 antes que 10... Aquí la pregunta que tendría que hacerte es ¿Por qué razón tienes el campo como tipo texto? eso es un error de diseño terrible.

Checa este script. el campo Numero es de tipo INT, el campo cadena es de tipo VARCHAR, observa lo que pasa al obtener los MAX():

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+--------+
  3. | numero | cadena |
  4. +--------+--------+
  5. |      1 | 1      |
  6. |      9 | 9      |
  7. |     10 | 10     |
  8. |    111 | 111    |
  9. +--------+--------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT MAX(numero), MAX(cadena) FROM tabla;
  13. +-------------+-------------+
  14. | MAX(numero) | MAX(cadena) |
  15. +-------------+-------------+
  16. |         111 | 9           |
  17. +-------------+-------------+
  18. 1 row in set (0.00 sec)

Esto es porque al hacer MAX sobre un campo tipo TEXT lo que hace es ordenarlos alfabéticamente, no por el valor que representa. Para hacer la conversión lo haces también con CAST:

http://dev.mysql.com/doc/refman/5.0/...functions.html

Y en lugar de la función ISNULL utilizas la función IFNULL:

http://dev.mysql.com/doc/refman/5.0/...functions.html

Sería más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT MAX(numero), MAX(CAST(cadena AS UNSIGNED)) FROM tabla;
  2. +-------------+-------------------------------+
  3. | MAX(numero) | MAX(CAST(cadena AS UNSIGNED)) |
  4. +-------------+-------------------------------+
  5. |         111 |                           111 |
  6. +-------------+-------------------------------+
  7. 1 row in set (0.00 sec)

Ojo para la próxima, te recomiendo que primero le preguntes a SAN GOOGLE antes de publicar una pregunta en el foro.

Saludos
Leo.