Mentre è certamente possibile usare la funzione di flusso IF()
di controllo di MySQL as demonstrated by dbemerlin's answer, ho il sospetto che potrebbe essere un po 'più chiaro al lettore (cioè te stesso, e qualsiasi altro futuro gli sviluppatori che potrebbe raccogliere il codice in futuro) per utilizzare un CASE
espressione invece:
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
Naturalmente, in questo esempio specifico è un po 'dispendioso per impostare A
a se stesso nella clausola ELSE
-meglio interamente per filtrare tali condizioni dal UPDATE
, tramite la clausola 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)
(Le disuguaglianze comportano A IS NOT NULL
).
Oppure, se si desidera che gli intervalli da chiudere piuttosto che aperta (si noti che questo sarebbe impostare i valori di 0
-1
-se che non è auspicabile, si potrebbe filtrare esplicitamente tali casi nella clausola WHERE
, oppure aggiungere una più elevata la precedenza WHEN
condizione):
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
anche se, come dbmerlin anche sottolineato, per questa specifica situazione si potrebbe considerare l'utilizzo di CEIL()
invece:
UPDATE Table SET A = CEIL(A) WHERE A BETWEEN 0 AND 2
valori di un'una solo esempi. Voglio applicarlo a qualsiasi condizione. Ad esempio: SE A IS NOT NULL è impostato su 'Some Varchar Value' ELSE SET su 'Some Other Varchar Value'; Darò una soluzione alla tua soluzione e vedrò come funziona. Molte grazie! – ThinkCode
hai un debole per quello che stai facendo? Al momento non riesco a vederlo. – inetphantom