Réseau - Web - GNU/Linux

2017 19 décembre

Basculer la valeur d'un champ booléen en SQL

Rédigé par Marc GUILLAUME | Aucun commentaire

Un 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

Écrire un commentaire

Quelle est la deuxième lettre du mot sketl ?

Fil RSS des commentaires de cet article

À propos

Yakati.info - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.022s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.info
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml