Ver Mensaje Individual
  #6 (permalink)  
Antiguo 16/05/2010, 17:58
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como splitar valor de columnas

Bien, supongamos que el campo `ht` tenga este tipo de valores "2-1". Si quisieras simplemente que el resultado de la operación saliese en la tabla, en principio sería
Código MySQL:
Ver original
  1.     SUBSTRING_INDEX(`ht`, '-', -1) operando1,
  2.     SUBSTRING_INDEX(`ht`, '-', 1) operando2,  
  3.     (SUBSTRING_INDEX(`ht`, '-', -1)  - SUBSTRING_INDEX(`ht`, '-', 1))  resultado
  4. FROM partidos;
Parece bien, pero el problema es que SUBSTRING_INDEX() devuelve una cadena, y la operación de substracción no está definida para ese caso. Para hacerlo se debe transformar el valor en un número:
Código MySQL:
Ver original
  1.     SUBSTRING_INDEX(`ht`, '-', -1) operando1,
  2.     SUBSTRING_INDEX(`ht`, '-', 1) operando2,  
  3.     (CAST(SUBSTRING_INDEX(`ht`, '-', -1) AS SIGNED)  - CAST(SUBSTRING_INDEX(`ht`, '-', 1) AS SIGNED))  resultado
  4. FROM partidos;
Ahora bien, si lo que quieres es que según quien sea el de mayor valor, devuelva un nombre determinado, el tema es simplemente que hay que usar esa misma función dentro de una función IF():
Código MySQL:
Ver original
  1.     IF(CAST(SUBSTRING_INDEX(`ht`, '-', -1) AS SIGNED)  >CAST(SUBSTRING_INDEX(`ht`, '-', 1) AS SIGNED), equipo1, equipo2)  ganador,
  2. FROM partidos;
Si, por otro lado, quisieras simplemente saber cuál es el esquema de tantos y cuál el resultado (suponiendo que esto es una tabla de resultados futbolísticos), la cosa andaría por:
Código MySQL:
Ver original
  1.     equipo1 `Local`,
  2.     CAST(SUBSTRING_INDEX(`ht`, '-', -1) AS SIGNED) Goles,
  3.     equipo2 `Visitante`,
  4.     CAST(SUBSTRING_INDEX(`ht`, '-', 1) AS SIGNED) Goles,
  5.     IF(CAST(SUBSTRING_INDEX(`ht`, '-', -1) AS SIGNED)  > CAST(SUBSTRING_INDEX(`ht`, '-', 1) AS SIGNED), 'Local', IF(CAST(SUBSTRING_INDEX(`ht`, '-', -1) AS SIGNED)  < CAST(SUBSTRING_INDEX(`ht`, '-', 1) AS SIGNED), 'Visitante', 'Empate') )  Ganador,
  6. FROM partidos;
Podrías seguir hasta casi la eternidad, con esto, pero creo que será suficiente por ahora.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)