Mientras que sin duda puede utilizar la función de flujo IF()
de control de MySQL as demonstrated by dbemerlin's answer, sospecho que podría ser un poco más claro para el lector (es decir, a sí mismo, y cualquier desarrolladores futuros que podrían recoger a su código en el futuro) para utilizar una CASE
expresión en lugar:
UPDATE Table
SET A = CASE
WHEN A > 0 AND A < 1 THEN 1
WHEN A > 1 AND A < 2 THEN 2
ELSE A
END
WHERE A IS NOT NULL
por supuesto, en este ejemplo específico que es un poco desperdicio para establecer A
a sí mismo en la ELSE
cláusula de la mejor enteramente para filtrar tales condiciones de la UPDATE
, a través de la cláusula WHERE
:
UPDATE Table
SET A = CASE
WHEN A > 0 AND A < 1 THEN 1
WHEN A > 1 AND A < 2 THEN 2
END
WHERE (A > 0 AND A < 1) OR (A > 1 AND A < 2)
(Las desigualdades implican A IS NOT NULL
).
O bien, si desea que los intervalos sean cerradas en vez de abierto (tenga en cuenta que esto sería establecer los valores de 0
a 1
-si esto es indeseable, se podría filtrar de manera explícita tales casos en la cláusula WHERE
, o bien añadir un mayor precedencia WHEN
condición):
UPDATE Table
SET A = CASE
WHEN A BETWEEN 0 AND 1 THEN 1
WHEN A BETWEEN 1 AND 2 THEN 2
END
WHERE A BETWEEN 0 AND 2
Aunque, como dbmerlin también señaló, para esta situación específica que podría considerar el uso de CEIL()
lugar:
UPDATE Table SET A = CEIL(A) WHERE A BETWEEN 0 AND 2
valores de a una re solo ejemplos. Quiero aplicarlo a cualquier condición. Por ejemplo: SI A NO ES NULO ESTABLECIDO en 'Algún valor varchar' ELSE SET en 'Algún otro valor Varchar'; Le daré una oportunidad a su solución y veré cómo funciona. ¡Muchas gracias! – ThinkCode
¿Tiene alguna referencia de lo que está haciendo? No puedo verlo en este momento .. – inetphantom