Nice programing

SQL 삽입 문에서 비트 값을 반전하는 우아한 방법이 있습니까?

nicepro 2021. 1. 5. 21:11
반응형

SQL 삽입 문에서 비트 값을 반전하는 우아한 방법이 있습니까?


SQL Server에서 일부 데이터를 변환하고 있습니다.

INSERT INTO MYTABLE (AllowEdit)
(Select PreventEdit from SOURCETABLE)

그래서 소스 테이블에서 비트 값을 반전해야합니다. 나는 NOT이것이 내가 코드에서 그것을하는 방법이기 때문에 일할 것으로 기대 했지만 그렇지 않습니다. 내가 생각할 수있는 가장 우아한 방법은 다음과 같습니다.

INSERT INTO MYTABLE (AllowEdit)
(Select ABS(PreventEdit -1) from SOURCETABLE)

더 표준적인 방법이 있습니까?


나는이 나 자신을 테스트하지 못했지만, 당신은 사용할 수 있어야 비트 부정 연산자를 , ~조금에 :

INSERT INTO MYTABLE (AllowEdit) 
(SELECT ~PreventEdit FROM SourceTable)

NOT 또는 XOR if bit

SELECT ~PreventEdit FROM SourceTable
SELECT 1 ^ PreventEdit FROM SourceTable

SourceTable에서 실제로 비트가 아닌 경우 다음과 같습니다.

SELECT 1 - PreventEdit FROM SourceTable

편집 : 테스트, NOT은 2의 보완이므로 비트 열에 사용되지 않으면 이상한 결과를 줄 수 있습니다.

DECLARE @bitvalue bit = 1, @intvalue int = 1;

SELECT ~@bitvalue, ~@intvalue
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue

SELECT @bitvalue = 0, @intvalue = 0

SELECT ~@bitvalue, ~@intvalue
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue

INSERT INTO MYTABLE (AllowEdit) (SELECT ~ ISNULL (PreventEdit, 0) FROM SourceTable

참조 URL : https://stackoverflow.com/questions/3324770/is-there-an-elegant-way-to-invert-a-bit-value-in-an-sql-insert-statement

반응형