2011-10-30 1 views
1

MySQL의의를 bit_count 기능은 어떤 경우에 매우 유용합니다Sybase SQL Anywhere에서 MySQL bit_count 함수를 시뮬레이트하는 방법은 무엇입니까?

http://dev.mysql.com/doc/refman/5.5/en/bit-functions.html#function_bit-count

지금 내가 그것을 지원하지 않는 다른 데이터베이스에서 해당 기능을 사용하고 싶습니다. DDL 레벨에서 클라이언트 데이터베이스에 액세스 할 수 없기 때문에 저장 함수를 만들지 않고 가장 간단한 방법은 무엇입니까? 의 >> 연산자로 2, 4, 8, 16 작품으로, 사용할 수 있도록 부서를하지 않는 것 어느 곳이나 사이베이스 SQL의 경우

SELECT (my_field & 1)  + 
     (my_field & 2) >> 1 + 
     (my_field & 4) >> 2 + 
     (my_field & 8) >> 3 + 
     (my_field & 16) >> 4 + 
     ... 
     (my_field & 128) >> 7 
FROM my_table 

:

하나 꽤 자세한 옵션은이 (TINYINT에 대한 데이터 유형)입니다 잘.

기타 다른 방법은 무엇입니까?

답변

1

이 알고리즘은 Java의 IntegerLong 클래스에서 다소 덜 장황합니다. 나는 그것이 왜 이런 방식으로 작동해야하는지에 대해 전혀 몰라요 :

public static int bitCount(int i) { 
    // HD, Figure 5-2 
    i = i - ((i >>> 1) & 0x55555555); 
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); 
    i = (i + (i >>> 4)) & 0x0f0f0f0f; 
    i = i + (i >>> 8); 
    i = i + (i >>> 16); 
    return i & 0x3f; 
}