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

Uso del Case en mysql

Estas en el tema de Uso del Case en mysql en el foro de Mysql en Foros del Web. Hola a todos nuevamente, Ahora con algo que seguramente es sencillo, en realidad quiero saber si yo estoy haciendo mal o es que así funciona, ...
  #1 (permalink)  
Antiguo 16/04/2012, 11:30
Avatar de Pablo Ayala  
Fecha de Ingreso: septiembre-2005
Ubicación: Cancún, México
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 28
Uso del Case en mysql

Hola a todos nuevamente,

Ahora con algo que seguramente es sencillo, en realidad quiero saber si yo estoy haciendo mal o es que así funciona, estoy haciendo una consulta en la base de datos donde uso "CASE" asi:

Código MySQL:
Ver original
  1. case r.checkin when r.checkin = '0000-00-00' then r.checkin else 'Sin definir' end checkin

Segun mi entender dice....
case r.checkin, Cuando r.checkin = '0000-00-00' entonces mostrar el valor de r.checkin, si no, entonces mostrar "sin definir", fin del case...

Funciona como yo quiero, pero no dejo de pensar por que funciona asi? no deberia ser:

Código MySQL:
Ver original
  1. case r.checkin when r.checkin = '0000-00-00' then 'Sin definir' else r.checkin end checkin

Quedo en espero de sus valiosos comentarios,

Saludos
__________________
Atentamente,

Pablo Ayala.
Si vas a responder algo en el foro que sea con amabilidad.
  #2 (permalink)  
Antiguo 16/04/2012, 12:59
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Uso del Case en mysql

Hola Pablo Ayala:

Tendrías que revisar primeramente la documentación para que veas cómo usar esta sentencia.

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

Si lees a detalle la documentación de la liga te podrás dar cuenta que hay DOS FORMAS DE USAR EL CASE, en una se compara UN CAMPO de la tabla y se LISTAN LOS POSIBLES VALORES PARA ESE CAMPO. Sería más o menos así:

Código:
CASE grado_de_estudio 
WHEN 1 THEN 'primaria'
WHEN 2 THEN 'secundaria'
WHEN 3 THEN 'profesional'
ELSE 'otro' 
END
En otras palabras se comporta como una CASE o SWITCH de programación. observa que NO ES NECESARIO HACER UNA COMPARACIÓN EN CADA WHEN.

Otra forma de usar sería colocando condiciones de comparación para cada caso. La misma consulta anterior podrías hacerla así:

Código:
CASE 
WHEN grado_de_estudio = 1 THEN 'primaria' 
WHEN grado_de_estudio = 2 THEN 'secundaria'
WHEN grado_de_estudio = 3 THEN 'profesional'
ELSE 'otro' 
END
Es decir, se comporta como una serie de IF's ANIDADOS y en cada WHEN DEBES DEFINIR EL CAMPO QUE DESEAS COMPARAR Y LA COMPARACIÓN

Para lo que quieres hacer tienes entonces dos opciones, checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------------+
  3. | fecha      |
  4. +------------+
  5. | 0000-00-00 |
  6. | 2012-04-16 |
  7. +------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT fecha,
  11.     -> CASE fecha WHEN '0000-00-00'
  12.     -> THEN 'sin definir' ELSE fecha END condicion
  13.     -> FROM tabla;
  14. +------------+-------------+
  15. | fecha      | condicion   |
  16. +------------+-------------+
  17. | 0000-00-00 | sin definir |
  18. | 2012-04-16 | 2012-04-16  |
  19. +------------+-------------+
  20. 2 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT fecha,
  23.     -> CASE WHEN fecha = '0000-00-00'
  24.     -> THEN 'sin definir' ELSE fecha END condicion
  25.     -> FROM tabla;
  26. +------------+-------------+
  27. | fecha      | condicion   |
  28. +------------+-------------+
  29. | 0000-00-00 | sin definir |
  30. | 2012-04-16 | 2012-04-16  |
  31. +------------+-------------+
  32. 2 rows in set (0.00 sec)

Aun más, podrías simplificar la consulta UTILIZANDO UNA SENTENCIA IF:

Código MySQL:
Ver original
  1. mysql> SELECT fecha, IF(fecha = '0000-00-00', 'sin definir', fecha) condicion
  2.     -> FROM tabla;
  3. +------------+-------------+
  4. | fecha      | condicion   |
  5. +------------+-------------+
  6. | 0000-00-00 | sin definir |
  7. | 2012-04-16 | 2012-04-16  |
  8. +------------+-------------+
  9. 2 rows in set (0.00 sec)

de la manera en que lo estás haciendo, en realidad estás mezclando ambas formas de hacer la condición... por lo tanto no estoy seguro del resultado que estás obteniendo, dale un vistazo y nos comentas.

Saludos
Leo.
  #3 (permalink)  
Antiguo 16/04/2012, 13:05
Avatar de Pablo Ayala  
Fecha de Ingreso: septiembre-2005
Ubicación: Cancún, México
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 28
Respuesta: Uso del Case en mysql

Wooow muy bien... me ha quedado mas claro... ahora veo que en mi consulta hay una combinacion rara....

Probare con la documentacion que me has pasado, muchas gracias!
__________________
Atentamente,

Pablo Ayala.
Si vas a responder algo en el foro que sea con amabilidad.

Etiquetas: case
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:19.