2009-11-07 5 views
2

누구나 프로 시저를 사용하지 않고 정수로 설정된 비트 인덱스를 제공하는 SQL-fu (MySQL과 관련 될 수 있음)가 있습니까? 프로 시저는 어떻습니까? 주어진 예를 들어mysql의 int 열에서 set 비트 인덱스 가져 오기

:

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

.. 얻을 행복 : 내가 나에게 줄 것이다 마법이 필요

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

:

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

내가 설정 한 비트를 볼 수 있습니다 0 기반.

+0

이 숙제입니까? – shoover

답변

3

MySQL의 기능 MAKE_SET()이 수행합니다

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

너무 ... 사람 수를 문자열의 시리즈를 생성합니다 다른 기능은 거기에 아마?

+0

+1 특별히 9 번째 비트를 좋아합니다.) – Andomar

+0

알다시피, 나는 찾고있었습니다. MySQL 셋트에서 구현이 테이블 구조에 국한되어 있지 않길 바란다. 고마워, 정확히 내가 필요했던 것. – Maas

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

0
SELECT TRIM(TRAILING ',' FROM CONCAT(IF(x&1, "1,", ""), 
            IF(x&2, "2,", ""), 
            IF(x&4, "3,", ""), ...)) 
관련 문제