programing

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

jooyons 2023. 7. 19. 21:20
반응형

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 배타적 논리합(^)

간단하지 않은 이유는 무엇입니까?bitfield = 1 - bitfield?

또 다른 방법은

DECLARE @thebit bit = 1, @theflipbit bit

SET @theflipbit = ~ @thebit

SELECT @theflipbit

여기서 "~"는 "NOT" 연산자를 의미합니다.깨끗하고 읽기 좋은 코드를 얻을 수 있습니다."negate the bit"는 훨씬 더 깔끔하며 "NOT" 연산자가 설계한 것과 정확히 일치합니다.

저는 대부분의 SQL 맛에 비트 NOT가 있다고 꽤 확신했기 때문에 확인해보니 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

SQL Server 2014 - 12.0.2269.0에서 단순 비트 단위 NOT 연산자(~)가 작동했습니다.

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

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

이것이 도움이 되길 바랍니다.

참조 - https://learn.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

반응형