programing

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

javamemo 2023. 6. 19. 21:04
반응형

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

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

SELECT ~PreventEdit FROM SourceTable
SELECT 1 ^ PreventEdit FROM SourceTable

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

SELECT 1 - PreventEdit FROM SourceTable

편집: 테스트는 2s 보완이므로 비트 열에 사용하지 않을 경우 홀수 결과가 나올 수 있습니다.

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

내 테이블에 삽입(편집 허용)(소스 테이블에서 ~ISNULL(편집 방지, 0) 선택)

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

반응형