programing

T-SQL의 부울 'NOT'가 '비트' 데이터 유형에서 작동하지 않습니까?

stoneblock 2023. 5. 14. 10:04

T-SQL의 부울 'NOT'가 '비트' 데이터 유형에서 작동하지 않습니까?

단일 부울 NOT 작업을 수행하려고 하면 MS SQL Server 2005에서 다음 블록이 작동하지 않는 것으로 나타납니다.

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = NOT @MyBoolean;
SELECT @MyBoolean;

대신에, 저는 더 성공적입니다.

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = 1 - @MyBoolean;
SELECT @MyBoolean;

하지만, 이것은 부정처럼 단순한 것을 표현하는 약간 비틀어진 방식으로 보입니다.

내가 뭘 빼놓았나요?

~ 연산자 사용:

DECLARE @MyBoolean bit
SET @MyBoolean = 0
SET @MyBoolean = ~@MyBoolean
SELECT @MyBoolean

당신의 해결책은 좋은 것입니다...이 구문을 사용하여 SQL의 비트를 전환할 수도 있습니다...

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = @MyBoolean ^ 1; 
SELECT @MyBoolean;

1에서 값을 빼면 효과가 있을 것 같지만, 의도를 표현하는 측면에서는 다음과 같이 하고 싶습니다.

SET @MyBoolean = CASE @MyBoolean WHEN 0 THEN 1 ELSE 0 END

더 장황하지만 조금 더 이해하기 쉬운 것 같아요.

반전 비트를 할당하려면 비트 NOT 연산자를 사용해야 합니다.비트 NOT 연산자 '~'를 사용할 때는 열이나 변수가 비트로 선언되었는지 확인해야 합니다.

이것은 당신에게 0을 주지 않습니다.

Select ~1 

다음 작업을 수행합니다.

select ~convert(bit, 1)

이것도 마찬가지일 것입니다.

declare @t bit
set @t=1
select ~@t

SQL 2005에는 실제 부울 값이 없으며 비트 값은 실제로 다른 값입니다.

비트는 데이터이기 때문에 1, 0 및 null의 세 가지 상태를 가질 수 있습니다.SQL은 이러한 데이터를 true 또는 false로 자동 변환하지 않습니다(SQL Enterprise Manager는 혼란스럽게도 true 또는 false로 변환합니다).

논리에서 비트 필드를 생각하는 가장 좋은 방법은 1 또는 0인 정수입니다.

비트 필드에서 논리를 직접 사용하면 다른 값 변수처럼 동작합니다. 즉, 값(임의의 값)이 있으면 논리가 참이고 그렇지 않으면 거짓입니다.

BIT는 부울이 아닌 숫자 데이터 형식입니다.그렇기 때문에 부울 연산자를 적용할 수 없습니다.
SQL Server에는 Boolean 데이터 유형이 없으므로(SQL SERVER 2008에 대해서는 확실하지 않음) @Matt Hamilton의 솔루션과 같은 것을 고수해야 합니다.

사용하다ABS절대값을 얻으려면(-1이 1이 됨)...

DECLARE @Trend AS BIT
SET @Trend = 0
SELECT @Trend, ABS(@Trend-1)

언급URL : https://stackoverflow.com/questions/177762/boolean-not-in-t-sql-not-working-on-bit-datatype