2009-11-07 97 views
2

任何人都可以使用任何SQL-fu(可以是MySQL特有的),它會給我一個int中設置位的索引,而不使用過程?用程序怎麼樣?從mysql中的int列中獲取設置位的索引

例如,給定:

create table example (val int); 
insert into example values (1), (2), (3), (4), (256); 

我可以看到設置位:

select conv(val, 10, 2) from example; 
+------------------+ 
| conv(val, 10, 2) | 
+------------------+ 
| 1    | 
| 10    | 
| 11    | 
| 100    | 
| 100000000  | 
+------------------+ 

我需要魔法,這將使我:

+------------------+ 
| (something)  | 
+------------------+ 
| 1    | 
| 2    | 
| 1,2    | 
| 3    | 
| 9    | 
+------------------+ 

..高興能得到基於0的也是。

+0

is this homework? – shoover 2009-11-07 00:44:47

回答

3

MySQL的函數MAKE_SET()做到這一點:

SELECT 
    MAKE_SET(val, '1', '2', '3', '4', '5', '6', '7', '8', '9') 
FROM 
    example 

有可能會產生一系列的數字串太...任何人的一些其他功能?

+0

+1特別喜歡第九位;) – Andomar 2009-11-07 01:08:17

+0

你知道,我在找在MySQL集並希望實現不侷限於表結構。感謝這一點,正是我所需要的。 – Maas 2009-11-07 05:51:37

1

這裏是一個初學者也許......至少在T-SQL中有一個明智的算子,你可以使用它來將值與任何輸入值結合起來。基本上規則是 如果 輸入& bitvalue = bitvalue 然後該位打開。

declare @i int 
set @i =40 
select @i & 1, @i & 2, @i & 4, @i & 8, @i & 16, @i & 32, 
     @i & 64, @i & 128, @i & 256 
+0

+1所以MySQL呢http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html#operator_bitwise-and – Andomar 2009-11-07 01:03:01

0
SELECT TRIM(TRAILING ',' FROM CONCAT(IF(x&1, "1,", ""), 
            IF(x&2, "2,", ""), 
            IF(x&4, "3,", ""), ...)) 
相關問題