"and"와 "&"의 차이점


13

논리 연산의 우선 순위를 이해하고 다음 코드를 가지고 있습니다.

declare @T bit ='TRUE'
declare @F bit ='False'

print @T and @F

그리고 오류를 다음과 같이 반환합니다.

키워드 'and'근처의 구문이 잘못되었습니다.

'and'를 '&'로 바꾸면 코드가 다시 작동합니다. 이전 코드가 작동하지 않는 이유는 무엇입니까? SQL 서버를 사용하고 있습니다.

답변:


29
print @T & @F

보고 0

&는 IS 비트 단위 AND 연산자.

& 비트 단위 연산자는 두 표현식 사이에 비트 논리 AND를 수행하여 두 표현식에 해당하는 각 비트를 가져옵니다. 입력 표현식에서 (해결중인 현재 비트에 대한) 두 비트의 값이 모두 1 인 경우에만 결과의 비트가 1로 설정됩니다. 그렇지 않으면 결과의 비트가 0으로 설정됩니다.

귀하의 경우에 @T & @F해결 하고 값 1 & 0이있는 데이터 유형의 결과를 반환 BIT합니다0

PRINT연산자에 전달되면 이 bit결과는 암시 적으로 문자열로 캐스트되고 결과는 클라이언트로 출력됩니다.


print @T and @F

그것에 꽤 많은 잘못이 있습니다.

AND

두 부울 표현식을 결합하고 두 표현식이 모두 TRUE 인 경우 TRUE를 리턴합니다.

bit부울과 동일하지 않습니다. 그것들은 상호 교환이 불가능하며 SQL Server는 bit필요할 때 암시 적 으로 부울 데이터 유형으로 캐스트 하지 않습니다 (SQL Server는 SQL 부울 데이터 유형을 구현하지 않습니다).

따라서 다음과 같은 표현식을 사용해야합니다.

@T = 'TRUE' AND @F = 'TRUE'

대신에

@T and @F

그럼에도 불구하고 문제는 끝나지 않았습니다 PRINT. 어쨌든 부울 식을 허용하지 않습니다. CASE아래와 같이 식을 사용할 수 있습니다 .

PRINT CASE 
          WHEN     (@T = 'TRUE' AND @F = 'TRUE') THEN 'True' 
          WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False' 
          ELSE 'Unknown' -- SQL uses three valued logic
      END

답변 주셔서 감사합니다! 나는 정말 많은 것을 배웠습니다!
— Jason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.