2015-06-19 2 views
14

Как обновить столбец таблицы, чтобы вернуть его значение (установите true, если значение равно false и false для true! Null остается null).Как уменьшить значение битового столбца в SQL

Пожалуйста исключают решения, где один использует case when или IIF() я хочу что-то вроде следующих

UPDATE mytable SET IsEditable = !IsEditable 

ответ

23

Вы можете использовать bitwise NOT operator:

update mytable set IsEditable = ~IsEditable 
+0

Спасибо, что это работает и быстрее! – Bellash

+0

Ну так быстро, как побитовое или. :-D – Ionic

13

Просто используйте:

UPDATE mytable SET IsEditable=IsEditable^1 

Если вы хотите проверить:

SELECT CONVERT(bit,0)^1, CONVERT(bit,1)^1 
+0

Это хорошо, но я делаю это медленнее, так как использует побитовое 'xor'! во всяком случае, проголосовали – Bellash

+0

Ну, я проверил его с 1.000.000.000 строк в быстром тесте. Оба производят одно и то же время и потребляют один и тот же процессор ('STATISTICS TIME ON'). Ну не думайте, что есть реальная разница. :-) – Ionic

+0

извините! не тестировалось, но согласно определению 'C = A^B = (A & (~ B)) | (B & (~ A))', которое кажется медленнее, чем 'C = ~ C', но я думаю, что' xor'ing to 'B' и' B' равны '1', скорости нет. Спасибо @Ionic – Bellash

4

В математике решение, вы можете использовать этот

UPDATE mytable SET IsEditable = 1 - IsEditable; 
  • IsEditable = 0 =>1 - IsEditable = 1
  • IsEditable = 1 =>1 - IsEditable = 0
  • IsEditable = Null =>1 - IsEditable = Null
+1

Не удалось удвоить это! Но он отлично работает благодаря вам @ shA.t – Bellash