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 ...
간단하지 않은 이유는 무엇입니까?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
'programing' 카테고리의 다른 글
| pip 버전 자체를 아는 방법 (0) | 2023.07.19 |
|---|---|
| 팬더의 merge()와 concat()의 차이 (0) | 2023.07.19 |
| 빛나는 서버 없이 빛나는 자체 앱 호스팅 및 설정 (0) | 2023.07.19 |
| 기존 Firebase 프로젝트의 영역을 변경하는 방법은 무엇입니까? (0) | 2023.07.19 |
| 쉼표로 구분된 목록으로 결과를 반환하는 PostgreSQL 쿼리 (0) | 2023.07.19 |