有没有一种优雅的方式来颠倒SQL插入语句中的位值?
我正在转换SQL Server中的一些数据:
INSERT INTO MYTABLE (AllowEdit) (Select PreventEdit from SOURCETABLE)
所以我需要反转源表中的位值。 我预计NOT
工作,因为这是我如何在代码中做到这一点,但事实并非如此。 我能想到的最优雅的方式是:
INSERT INTO MYTABLE (AllowEdit) (Select ABS(PreventEdit -1) from SOURCETABLE)
有没有更标准的方法来做到这一点?
我没有自己testing,但是你应该可以使用按位否定运算符 ~
。
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
编辑:一个testing,注意NOT是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
INSERT INTO MYTABLE(AllowEdit)(SELECT〜ISNULL(PreventEdit,0)FROM SourceTable