2012-06-02 4 views
1

SQL 서버 데이터베이스에서 소스 파일의 행을 저장하고 있습니다. 내 쿼리에서 두 파일의 실행이 겹치는 지 확인하려고합니다. 예 : 쿼리 varbinary 비트 필드

 
Line Run1 Run2 
1 x 
2 x x 
3 
4   x 

는 Run1로 지정한 내가 (Run1로 지정한 &!하고 run2)이 1 라인 만 Run1로 지정한 실행 된 작업을 수행하여 볼 수있는 선 (1)과 (2) run2는 라인 (2) 및 (4)를 실행.

비트 마스크 (varbinary)로 실행을 저장하는 경우 SQL 쿼리에서 실행을 비교하는 방법은 무엇입니까?

create table runs columns filename varchar, runCoverage varbinary; 
select filename, andNot(run, 1) from runs group by filename 

는 (선택)을 비교 다른 비트 필드를 실행으로 실행됩니다. 이상적으로는 레코드 그룹의 비트 필드 (한 구성 요소의 라인 적용 범위 데이터)와 다른 레코드 그룹과의 AND 필드가 필요합니다. 결과에서 1 비트를 계산할 수 있습니다. 하나의 테스트 그룹에서 적용되지만 다른 그룹에서는 적용되지 않는 라인 수입니다.

답변

0

줄 수가 너무 크지 않으면 BIGINT에 VARBINARY 라인 1 실행되는 모든 파일을 얻을 비트 comparissons에게 를 수행합니다

where (cast(runCoverage as bigint) & 1) > 0 

또는 라인 1

where (cast(runCoverage as bigint) & ~1) > 0 

라인의 수가 높은 경우 옆에있는 줄을 실행되는 모든 파일을 일부 도우미 함수는 substr을 사용하여 p를 얻을 수 있습니다. 로퍼 비트. 그리고 다시, 아마 나는이 질문을 오해하고 있습니다.

+0

bitmasking을 두려워하지 않는 SQL 개발자를 만나서 좋습니다. – Namphibian

+0

내 비트 필드는 수천 줄의 파일 일 수 있습니다. –