ProgramingTip

T-SQL에서 비트 필드를 뒤집는 방법은 무엇입니까?

bestdevel 2020. 11. 9. 20:07
반응형

T-SQL에서 비트 필드를 뒤집는 방법은 무엇입니까?


업데이트 쿼리를 사용하여 SQL Server에서 비트 필드를 뒤집으려고합니다. 즉, 모든 0을 1로 만들고 반대도 마찬가지입니다. 가장 우아한 솔루션은 무엇입니까?

T-SQL에는 비트 NOT 연산자가없는 것 (명백한 것이 누락되지 않는 것). 업데이트를 수행하는 다른 방법을 사용할 수 없습니다.


작성하기 위해 비트가 필요하지 않습니다. 1 / true로 XOR하십시오.

확인 광고 :

select idColumn, bitFieldY, bitFieldY ^ 1 as Toggled
from tableX

업데이트 비용 :

update tableX
set bitFieldY = bitFieldY ^ 1
where ...

MSDN T-SQL 독점 OR (^)


왜 단순 하지 보안 bitfield = 1 - bitfield보장?


또 다른 방법은

DECLARE @thebit bit = 1, @theflipbit bit

SET @theflipbit = ~ @thebit

SELECT @theflipbit

여기서 "~"는 "NOT"연산이 의미합니다. 깨끗하고 읽기 좋은 코드를 얻습니다. "비트 부정 행위"는 훨씬 더 깨끗하며 "NOT"라고 정확하게 작동합니다.


나는 대부분의 SQL 플레이버에 비트가 아니고 확실하게 확인하고 TSQL에 하나가있는 것 입니다.

문서에서 문자 ~입니다.


UPDATE tblTest SET MyBitField = CASE WHEN MyBitField = 1 THEN 0 ELSE 1 END

평범하지만 모든 사람들이 무엇을하고있는 것입니다.

편집하다 :

주석에 제안 된대로 null을 할 수도 있습니다. 물론 귀하의 요구 사항에 따라 증가합니다.

UPDATE tblTest SET 
   MyBitField = CASE 
      WHEN MyBitField = 1 THEN 0 
      WHEN MyBitField = 0 THEN 1
      ELSE NULL -- or 1 or 0 depending on requirements
   END

간단한 비트 NOT 연산자 (~)가 SQL Server 2014-12.0.2269.0에서 저에게 맞는군요.

T-SQL 내부의 업데이트 절에서-

        Update TableName
        SET    [bitColumnName] = ~[bitColumnName],
               ....
        WHERE  ....

도움이 되셨기를 바랍니다.

참조 -https : //docs.microsoft.com/en-us/sql/t-sql/language-elements/bitwise-not-transact-sql


이거 해봤 어?

UPDATE mytable SET somecolumn = 
  CASE WHEN somecolumn = 0 THEN 1 
       WHEN somecolumn IS NULL THEN NULL
       WHEN somecolumn = 1 THEN 0
  END

질의 (vb)

x = "select x from table"

업데이트 (vb)

"update table set x=" Not(x*(1))

참고 URL : https://stackoverflow.com/questions/1397332/how-to-flip-bit-fields-in-t-sql

반응형