Sql-Server
SQL Server 中帶有 BIT 和布爾值的布爾邏輯
如何將布爾邏輯與 SQL Server 中的按位和/或運算符混合,特別是 SQL Azure 數據庫和/或 SQL Server 2016?
為了展示我正在嘗試做的事情,請考慮以下腳本:
DECLARE @String varchar(2000) = 'asdf' DECLARE @Flag1 bit = 1 DECLARE @Flag2 bit = 0 DECLARE @Data Table ( Value bit ) INSERT INTO @Data VALUES (@Flag1 | @Flag2) --INSERT INTO @Data VALUES ((@Flag1 | @String LIKE '%qwerty%') & @Flag2) SELECT * FROM @Data
該腳本按原樣執行良好,但是當您取消註釋那一秒
INSERT
時,一切都變得鬆散了。我知道這是無效的語法,因為我將布爾邏輯與位運算符混合在一起。但是,將這種邏輯放入其中的正確方法是什麼?不用對陳述發瘋CASE WHEN
,有沒有辦法做到這一點?
您可能需要按如下方式修改您的程式碼:
DECLARE @String varchar(2000) = 'asdf' DECLARE @Flag1 bit = 1 DECLARE @Flag2 bit = 0 DECLARE @Data Table ( Value bit ) INSERT INTO @Data VALUES (@Flag1 | @Flag2) INSERT INTO @Data VALUES ((@Flag1 | case when charindex('qwerty', @string ) > 0 then 1 else 0 end) & @Flag2) SELECT * FROM @Data
您的原始程式碼有語法錯誤,因為LIKE不是運算符。
另一種方法是使用IIF如下
DECLARE @String varchar(2000) = 'asdf' DECLARE @Flag1 bit = 1 DECLARE @Flag2 bit = 0 DECLARE @Data Table ( Value bit ) INSERT INTO @Data VALUES (@Flag1 | @Flag2) INSERT INTO @Data VALUES ((@Flag1 | iif( @String LIKE '%qwerty%', 1, 0)) & @Flag2) SELECT * FROM @Data