Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Побитовый оператор  [new]
fRosSty
Member

Откуда:
Сообщений: 30
+
DECLARE @i int;
SET @i = 1 | 5;

Update p
SET Flags = 3
From T_USERS as p
Where (p.Flags = @i & 1) AND DATEDIFF(month,p.LastPasswordChangeDate, GETDATE())>=4
Update p
SET Flags = 7
From T_USERS as p
Where (p.Flags = @i & 5) AND DATEDIFF(month,p.LastPasswordChangeDate, GETDATE())>=4


подскажите как можно оптимизировать, чтобы все было через один Update
26 сен 16, 16:55    [19709737]     Ответить | Цитировать Сообщить модератору
 Re: Побитовый оператор  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
Update p 
SET Flags = CASE 
WHEN p.Flags = @i & 1 THEN 3
 WHEN p.Flags = @i & 5 THEN 7 ELSE Flags  
END
From T_USERS as p
Where DATEDIFF(month,p.LastPasswordChangeDate, GETDATE())>=4
26 сен 16, 16:58    [19709758]     Ответить | Цитировать Сообщить модератору
 Re: Побитовый оператор  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Konst_One
Update p 
SET Flags = CASE 
WHEN p.Flags = @i & 1 THEN 3
 WHEN p.Flags = @i & 5 THEN 7 ELSE Flags  
END
From T_USERS as p
Where DATEDIFF(month,p.LastPasswordChangeDate, GETDATE())>=4
AND p.Flags IN(@i & 1,@i & 5)
Поправил
26 сен 16, 17:02    [19709791]     Ответить | Цитировать Сообщить модератору
 Re: Побитовый оператор  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
да, упустил, а то всю таблицу почти апдейтит
26 сен 16, 17:03    [19709798]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить