2017-11-30 9 views
0

I는 다음과 같습니다 테이블 (단지 하나의 부울 필드)이 있습니다 SQL - 비트 AND 부울 값 필드의 모든 결과

| IsTrue  | 
--------------- 
| 1   | 
--------------- 
| 1   | 
--------------- 
| 0   | 
--------------- 
| 1   | 
--------------- 

가 나는 비트 단위를 할 수있는 방법이 있나요 및 모든 값에 이 필드에서 하나의 참/거짓 결과가 나옵니까?

다음과 같음 : select BITWISE_AND(IsTrue) from MyTable 이는 결과가 | 0 | ?

+0

사용중인 데이터베이스에 질문을 태그하십시오. 또한 열이 * bit * 또는 * boolean *인지 여부도 명확히하십시오. 이것들은 꼭 같은 것은 아닙니다. –

답변

2

당신은 "비트가와"min()에 해당합니다, 0 또는 1을 취에만 값이있는 경우 : max()에 해당

select min(IsTrue) as "bitwise_and" 

그리고 "비트 또는"입니다 :

select max(IsTrue) as "bitwise_or" 

이것은 수치적인 사실이므로 사용중인 데이터베이스와 독립적입니다.

+0

평소와 같이 좋은 대답 @Gordon – Hackerman

+0

당신은 bool을 int로 변환하려고합니다. 이것은 트릭을 않습니다! 매우 감사. –

0

가장 일반적인 해결책은 액면가에 위와 같이 1 또는 0 중 하나가 포함되어 있다고 생각하면 아마도 min(IsTrue)입니다.

그러나 몇 가지주의 사항 :

당신은 "비트" AND을 요구하고

,하지만 당신은 을 설명하고는 "논리적"AND -하는 열이 보유하고있는 경우 숫자 "1 = TRUE 또는 0 = FALSE ", 동일합니다; 그러나 다른 경우에는 같은 것일 수도 있습니다.

일부 데이터베이스는 비트 연산자를 제공하지만 다른 연산자는 제공하지 않습니다. 비트 단위 집계 함수는 완전히 다른 것입니다. 이것이 min이보다 일반적인 해결책 인 이유입니다. 그것은 모든 데이터베이스가 제공 할 표준 기능입니다. 그리고 그것은 당신이 윤곽을 그리는 것처럼 보이는 것을 포함하여 다양한 상황에서 작동 할 것입니다. 기술적으로 열 유형이 DBMS가 min을 정의하지 않는 것 (또는 이상한 방식으로 정의) 인 경우 실패합니다. 음수 인 숫자가 "true"로 해석 될 수 있으면 실패합니다 (이 경우 min(abs(isTrue)) 또는 그와 비슷한 것으로 얻을 수 있습니다).