¿Cómo funciona el CASO MySQL?
Sé que la sintaxis de SQL CASE
es la siguiente:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Sin embargo, no entiendo cómo funciona esto, posiblemente porque estoy pensando en ello como en una declaración if
.
Si tengo un campo en la tabla user_role
, por ejemplo, que contiene nombres como "Manager", "Part Time", etc., cómo puedo generar un campo role_order
con un número diferente dependiendo del rol. En el caso de este ejemplo, "if user_role = 'Manager' then role_order = 5".
Tenga en cuenta que estoy buscando un enseñar a un hombre cómo pescar responder en lugar de dar a un hombre un pescado responder.
3 answers
CASE
es más como una declaración de cambio. Tiene dos sintaxis que puedes usar. La primera le permite usar cualquier instrucción de comparación que desee:
CASE
WHEN user_role = 'Manager' then 4
WHEN user_name = 'Tom' then 27
WHEN columnA <> columnB then 99
ELSE -1 --unknown
END
El segundo estilo es para cuando solo se está examinando un valor, y es un poco más sucinto:
CASE user_role
WHEN 'Manager' then 4
WHEN 'Part Time' then 7
ELSE -1 --unknown
END
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-27 05:29:32
CASE
en MySQL hay tanto una instrucción como una expresión , donde cada uso es ligeramente diferente.
Como una instrucción, CASE
funciona como una instrucción switch y es útil en procedimientos almacenados, como se muestra en este ejemplo de la documentación (enlazado arriba):
DELIMITER |
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN -- Do other stuff
END;
END CASE;
END;
|
Sin embargo, como expresión se puede usar en cláusulas:
SELECT *
FROM employees
ORDER BY
CASE title
WHEN "President" THEN 1
WHEN "Manager" THEN 2
ELSE 3
END, surname
Además, tanto como una declaración como una expresión, el primer argumento se puede omitir y cada WHEN
debe toma una condición.
SELECT *
FROM employees
ORDER BY
CASE
WHEN title = "President" THEN 1
WHEN title = "Manager" THEN 2
ELSE 3
END, surname
Proporcioné esta respuesta porque la otra respuesta no menciona que CASE
puede funcionar tanto como una declaración como como una expresión. La principal diferencia entre ellos es que la forma de declaración termina con END CASE
y la forma de expresión termina con solo END
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-02 16:57:44
Quería un ejemplo simple del uso de case con el que pudiera jugar, esto ni siquiera necesita una mesa. Esto devuelve impar o par dependiendo de si segundos es impar o par
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-17 15:33:53