[SQL] Opération sur des masques binaires

Opération sur des masques binaires [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 11-10-2003 à 16:38:54    

Bonjour,
J'ai une table qui a cette structure :
 

Grp     Mask
 0    0011100
 1    0101010
 2    0011000
 3    1110000
 4    0110101


 
Je voudrais, dans une requete SQL, pouvoir faire une opération binaire de regroupement sur un jeu de résultats, par exemple :
 

Code :
  1. SELECT mon_opération_de_regroupement(Mask) FROM ma_table WHERE Grp > 2


 
Et obtenir ca :
 

Mask
1110101


 
C'est à dire un OU sur toutes les lignes d'un champ de mon jeu de résultats.
 
C'est possible ? Quelqu'un a une piste pour le faire ?

Reply

Marsh Posté le 11-10-2003 à 16:38:54   

Reply

Marsh Posté le 13-10-2003 à 09:42:10    

Quel est ton SGBD ?

Reply

Marsh Posté le 13-10-2003 à 09:50:08    

Hmmm... Ton mask, il est stocké dans quoi ?
 
C'est une chaîne de caractères ?
C'est un number dans lequel tu met 10 pour faire 2 ?
 
A ce moment, change.
Passe à un number normal, et pour écrire 10, écrit bêtement 2.
 
En effet, le binaire marche très bien, à condition de rester en vrai binaire, c'est à dire que tu dois stocker tes nombres en tant que nombre, faut pas chercher à ce que ce soit joli à regarder.
 
Ici, une ligne (syntaxe Oracle) pour tester un bit dans un nombre :
 

AND mod(trunc(le_masque/power(2,position_du_bit), 0), 2) = 1


 
Si le bit en question est à 1, alors ça retournera true, sinon false.
 
Sinon, pour faire des AND et OR ou NOT booléens, alors voici la syntaxe SQL Server :
 
http://msdn.microsoft.com/library/ [...] r_7fax.asp (pour le AND)
 
Ca donne :
 
AND ((champ1 & champ2) | !champ3)
 
Par exemple. Ca fait le résultat de l'oppération :
 
(champ1 AND champ2) OR NOT champ3

Reply

Marsh Posté le 15-10-2003 à 11:25:52    

Avec mysql, je pense que les fonctions BIT_OR() et BIT_AND répondent à ton problème :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed