문제

작동하지 않는 단일 부울을 수행하려고 시도하면 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

더 장점이지만 이해하기가 조금 더 쉽다고 생각합니다.

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

비트는 1, 0과 null (데이터이기 때문에)을 가질 수 있습니다. SQL은 자동으로이를 true 또는 false로 변환하지 않습니다 (혼란스럽게 SQL Enterprise Manager는 그렇습니다)

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

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

역 비트를 할당하려면 비트가 아닌 연산자를 사용해야합니다. 연산자가 아닌 Bitwise를 사용하는 경우 '~'는 열이나 변수가 약간 선언되어야합니다.

이것은 당신에게 0을 줄 수 없습니다 :

Select ~1 

이것은 :

select ~convert(bit, 1)

이건 :

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

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

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

DECLARE @Trend AS BIT
SET @Trend = 0
SELECT @Trend, ABS(@Trend-1)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top