T-SQL에서 부울 '이 아닌' '비트'데이터 유형에서 작업하지 않습니까?
-
05-07-2019 - |
문제
작동하지 않는 단일 부울을 수행하려고 시도하면 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)