반응형
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
반응형
'Nice programing' 카테고리의 다른 글
VB.NET에서 배열을 인라인으로 선언하는 방법 (0) | 2021.01.05 |
---|---|
Rails : 자바 스크립트 문자열의 국제화? (0) | 2021.01.05 |
정적 열거 형, C # 선언 문제 (0) | 2021.01.05 |
Haskell에서 언제 let과 함께 사용합니까? (0) | 2021.01.05 |
Eclipse Memory Analyser이지만 항상 내부 오류가 발생 했습니까? (0) | 2021.01.05 |