Je voudrais juste les faire comme deux déclarations « séparer » et ne pas se soucier d'essayer de trouver une solution intelligente (ce qui est rarement intelligent IMNSHO).
Vous verrez que j'ai cité le mot "séparé" ci-dessus puisque tout SGBD décent fournira un support transactionnel qui rendra ces deux instructions en une, en termes d'atomicité (le A dans ACID).
En d'autres termes, quelque chose comme:
start transaction;
update table set number2 = number where number != "";
update table set number = $number, number2 = number where number = "";
commit transaction;
Ce sera presque toujours plus rapide (en supposant number
est indexé) qu'une solution intelligente en utilisant des fonctions par ligne comme CASE
, IF
et ainsi de suite, depuis deux très les passages rapides valent mieux qu'un passage lent :-)