[Résolu] Remplacer valeur d'un champ booléen

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Raf
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 07 mars 2008 11:51

[Résolu] Remplacer valeur d'un champ booléen

Message par Raf »

Bonjour à tous,

Je n'ai pas trouvé de réponse, désolé si elle s'y trouve :oops:

Voilà le problème, j'ai 2000 enregistrement environ qui ont été importés ou encodés avant que je ne m'aperçoive que je n'avais pas mis les valeurs par défaut de 12 cases à cocher :roll: qui devaient être sur NON (FALSE).

Au lieu de cela elles étaient sur <aucun(e)> (UNDEFINED)

Je cherche le moyen de faire une commande sql remettant tout ces champs UNDEFINED sur FALSE... mais je n'arrive déjà pas dans une requête à faire sortir uniquement ces champs (quel critère mettre ?)

Merci d'avance si vous avez une piste

A bientôt

Raf
Dernière modification par Raf le 25 mars 2008 13:11, modifié 1 fois.
OpenOffice 2.3.1 sous windows XP SP2
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

Utiliser Outils > SQL avec une instruction du type :

Code : Tout sélectionner

UPDATE "TClients" SET "case" = FALSE
Raf
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 07 mars 2008 11:51

Message par Raf »

Merci beaucoup pour cette réponse... :)

J'ai testé dans ma base d'essai. Cela fonctionne mais en fait cela ne fait pas exactement ce que je veux. Car là cela me mets la case à false même si elle avait été encodée à true (ce qui me fait perdre des centaines d'encodage), or je veux juste mettre sur false ceux qui n'étaient ni false ni true (je sais pas si je suis très clair ?)

Il doit y avoir un Where à ajouter mais avec undefined cela ne fonctionne pas :(
OpenOffice 2.3.1 sous windows XP SP2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Alors au pif...

Code : Tout sélectionner

UPDATE "TClients" SET "case" = FALSE WHERE "case" NOT TRUE OR "case" NOT FALSE
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Raf
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 07 mars 2008 11:51

Message par Raf »

Merci beaucoup !!!

Mais cela ne fonctionne pas
Unexpected token in statement [UPDATE "T_clients" SET "SF" = FALSE WHERE "SF" NOT TRUE]


Dans une requête, j'arrive à ne sélectionner que ceux qui sont cochés ou décoché avec le critère BETWEEN 0 AND 1 (ou IN (0,1) )

mais

NOT BETWEEN 0 AND 1 ne retourne rien

et

Code : Tout sélectionner

UPDATE "T_clients" SET "SF" =  FALSE WHERE "SF" NOT BETWEEN 0 AND 1
la commande fonctionne mais ne donne pas le résultat attendu (cela ne change rien en fait)

:(

Merci quand même je continue à chercher de mon côté mais si vous avez une idée lumineuse :idea: :D

A bientôt

Raf
OpenOffice 2.3.1 sous windows XP SP2
Raf
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 07 mars 2008 11:51

Message par Raf »

EN fait c'est peut être aussi plus simple de se dire que je souhaites mettre tous les enregistrement à false sauf ceux qui sont à true mais NOT 1 ne fonctionne pas non plus.

Edit Le truc qui aurait du fonctionner

Code : Tout sélectionner

UPDATE "T_clients" SET "SF" =  FALSE WHERE NOT ( ( "SF"  =1 ) )
Ne fonctionne pas (enfin la requête s'exécute). Et en requête cela me retourne uniquement les FALSE. Tout se passe comme si les UNDEFINED n'existaient simplement pas (sauf quand je fais la solution de Pierre-Yves Samyn mais qui me fait perdre les true)

:x
OpenOffice 2.3.1 sous windows XP SP2
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: Remplacer valeur d'un champ booléen

Message par Pierre-Yves Samyn »

Raf a écrit :sauf quand je fais la solution de Pierre-Yves Samyn mais qui me fait perdre les true
Ah... dommage que tu ne l'aies pas précisé plus tôt :) :
Raf a écrit :Voilà le problème, j'ai 2000 enregistrement environ qui ont été importés ou encodés avant que je ne m'aperçoive que je n'avais pas mis les valeurs par défaut de 12 cases à cocher :roll: qui devaient être sur NON (FALSE). ...
Je cherche le moyen de faire une commande sql remettant tout ces champs UNDEFINED sur FALSE...
Dans ce cas :

Code : Tout sélectionner

update "Activités" set "case"=false where ifnull("case",0) <>1
Raf
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 07 mars 2008 11:51

Message par Raf »

:P :P

ROLALA CA MARCHE !!!! :idea:

MERCI !!!

Pour ma gouverne, peux-tu me traduire en langage humain la fin de la commande

Code : Tout sélectionner

where ifnull("case",0) <>1
Je comprends "où ??? différent de 1" c'est la syntaxe ifnull(case,0) dont je ne comprends pas le sens. (j'ai besoin de comprendre si je veux réutiliser la fonction un jour ;) )

Mais donc globalement cela veut dire que les UNDEFINED sont considérés comme nul.
OpenOffice 2.3.1 sous windows XP SP2
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Code : Tout sélectionner

IFNULL(exp,valeur)
Si exp est Null, valeur est retournée, sinon c'est Exp

Concrétement, on remplace Null par zéro.

cf. documentation http://hsqldb.org/doc/guide/ch09.html#N1251E
Raf
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 07 mars 2008 11:51

Message par Raf »

Ok merci :D !! C'est pas immédiat pour moi comme logique mais je vais lire ça à tête reposée ;)

ET merci encore pour la solution
OpenOffice 2.3.1 sous windows XP SP2