Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/04/2012, 12:59
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: 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.