Basculer la valeur d'un champ booléen en SQL
Rédigé par Marc GUILLAUME | Aucun commentaireUn champ booléen dans SQLite ou MySQL (contenant une valeur vrai/faux) est représenté par les valeurs 0 ou 1. Pour modifier sa valeur on peut lancer un SELECT
sur la table et en fonction de la valeur renvoyée mettre la table à jour. Mais ce n'est pas la façon la plus efficace et élégante.
Une meilleur façon est de faire une bascule de la valeur. Pour cela on utilisera la fonction ABS()
renvoyant la valeur absolue d'un nombre. Pour inverser la valeur d'un champ booléen, il suffit de retirer 1 à la valeur du champ et de prendre la valeur absolue du résultat :
Valeur dans la table | On lui retire 1 | Valeur absolue du résultat |
---|---|---|
1 | 1 - 1 = 0 | 0 |
0 | 0 - 1 = -1 | 1 |
Nous allons prendre en exemple une table client contenant un identifiant, le nom du client et un champ pseudo-booléen actif, et un petit jeu d'essai de trois clients :
BEGIN TRANSACTION; CREATE TABLE "t_client_cli" ( "cli_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "cli_nom" TEXT, "cli_actif" INTEGER ); INSERT INTO `t_client_cli` (cli_id,cli_nom,cli_actif) VALUES (1,'Toto',0); INSERT INTO `t_client_cli` (cli_id,cli_nom,cli_actif) VALUES (2,'Titi',1); INSERT INTO `t_client_cli` (cli_id,cli_nom,cli_actif) VALUES (3,'Tata',1); COMMIT;
On obtient donc les données suivantes :
cli_id | cli_nom | cli_actif |
---|---|---|
1 | Toto | 0 |
2 | Titi | 1 |
3 | Tata | 1 |
Pour changer la valeur de la colonne cli_actif
du client Titi (identifiant 2) il suffit de lancer la requête suivante :
UPDATE t_client_cli SET cli_actif = abs(cli_actif - 1) WHERE cli_id = 2;
Et l'on voit que :
cli_id | cli_nom | cli_actif |
---|---|---|
1 | Toto | 0 |
2 | Titi | 0 |
3 | Tata | 1 |