"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.