Alors que vous avez certainement pouvez utiliser la fonction de contrôle de flux de MySQL IF()
as demonstrated by dbemerlin's answer, je pense qu'il pourrait être un peu plus clair au lecteur (c.-à-vous, et les futurs développeurs qui pourraient choisir votre code à l'avenir) d'utiliser un CASE
expression à la place:
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
Bien sûr, dans cet exemple spécifique, il est un peu inutile de mettre A
à lui-même dans la ELSE
clause mieux entièrement pour filtrer ces conditions du UPDATE
, via la clause 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)
(les inégalités impliquent A IS NOT NULL
).
Ou, si vous voulez que les intervalles fermés plutôt que d'ouvrir (notez que cela fixerait les valeurs de 0
-1
-si qui est indésirable, on peut filtrer explicitement de tels cas dans la clause WHERE
, ou ajouter une autre plus priorité WHEN
condition):
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
Bien que, comme dbmerlin a également souligné, pour cette situation particulière vous pourriez envisager d'utiliser à la place CEIL()
:
UPDATE Table SET A = CEIL(A) WHERE A BETWEEN 0 AND 2
Les valeurs de a a re juste des exemples. Je veux l'appliquer à n'importe quelle condition. Par exemple: SI A N'EST PAS NULL, SET à 'Varchar Value' ELSE SET à 'Some Other Varchar Value'; Je vais donner une solution à votre solution et voir comment cela fonctionne. Merci beaucoup! – ThinkCode
avez-vous une idée de ce que vous faites? Je ne peux pas le voir pour le moment .. – inetphantom