2009-03-30 4 views
2

J'ai une table dans une base de données MySQL défini similaire à ce qui suit:Récupérer une colonne SET MySQL comme une liste de décalages entiers

CREATE TABLE doc_types (
    id INT UNSIGNED PRIMARY KEY, 
    types SET('foo','bar','baz','quux',...) NOT NULL 
) 

Je voudrais obtenir la valeur de la colonne types comme par des virgules liste séparée de décalages d'entiers basés sur 1 dans cette liste de valeurs de consigne, par ex. "1,3,4" pour une ligne dont la valeur est "foo,baz,quux". (Ce format est requis par un autre outil du système sur lequel je travaille, et pour diverses raisons pratiques, je ne suis pas en mesure de le modifier pour accepter quelque chose de différent.) La fonction EXPORT_SET intégrée n'est pas totalement différente, mais son retour valeur serait sous la forme "1,0,1,1,...", essentiellement un jeu de bits de 64 éléments représenté sous forme de chaîne.

Existe-t-il un bon moyen pour SELECT from doc_types et obtenir les valeurs types dans le format de décalage que j'ai décrit ci-dessus, dans une seule requête SQL?

Répondre

2

Essayez ceci:

SELECT CONCAT_WS(',', 
    IF(types & 1 > 0, 1, NULL), 
    IF(types & 2 > 0, 2, NULL), 
    IF(types & 4 > 0, 3, NULL), 
    /* fill in rest here */ 
) as output 
FROM doc_types; 
1

Essayez ceci:

SELECT MAKE_SET(types+0, '1', '2', '3') as output FROM doc_types; 
Questions connexes