Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

CAST en Mysql

Estas en el tema de CAST en Mysql en el foro de Mysql en Foros del Web. Hola a todos, yo normalmente en SQL Server uso el cast de la siguiente forma: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT ISNULL ( MAX ...
  #1 (permalink)  
Antiguo 17/04/2013, 15:08
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
CAST en Mysql

Hola a todos, yo normalmente en SQL Server uso el cast de la siguiente forma:

Código SQL:
Ver original
  1. SELECT ISNULL(MAX(CAST(codigo AS INT)), 0) FROM MI_TABLA

Pero en Mysql como es?..,

Resulta q tengo una tabla cuya PK es entera (INT)

Yo necesito consutlar el maximo numero para aumentarlo en 1 y lo hago asi:

Código MySQL:
Ver original
  1. SELECT MAX(COD_PER) from perfiles
Pero eso me sirve hasta el No 9, porque cuando ya existe el COD_PER=10, la consulta me muetra como maximo el valor 9

Como puedo hacer esta consulta en Mysql.... ??
  #2 (permalink)  
Antiguo 17/04/2013, 15:29
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.
  #3 (permalink)  
Antiguo 17/04/2013, 16:34
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: CAST en Mysql

Muchas gracias...

Etiquetas: cast, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:52.