Существует ли изящный способ Инвертировать немного значения в SQL, вставляют Оператор?

Я преобразовываю некоторые данные в SQL Server:

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

таким образом, мне нужно к инверсии битовое значение из исходной таблицы. Я ожидал NOT для работы как, это - то, как я сделал бы это в коде, но это не делает. Самым изящным путем я могу думать:

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

Существует ли более стандартный способ сделать это?

56
задан gbn 24 July 2010 в 10:58
поделиться

2 ответа

Я не тестировал это сам, но вы должны иметь возможность использовать оператор побитового отрицания , ~ в битах:

INSERT INTO MYTABLE (AllowEdit) 
(SELECT ~PreventEdit FROM SourceTable)
117
ответ дан 26 November 2019 в 17:09
поделиться

NOT или XOR if bit

SELECT ~PreventEdit FROM SourceTable
SELECT 1 ^ PreventEdit FROM SourceTable

Если это не бит в SourceTable, то вот это:

SELECT 1 - PreventEdit FROM SourceTable

Edit: A test, note NOT is 2s complement so could give odd results if not used on a bit column

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
26
ответ дан 26 November 2019 в 17:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: