Sql-Server

SQL Server 中帶有 BIT 和布爾值的布爾邏輯

  • December 14, 2016

如何將布爾邏輯與 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

引用自:https://dba.stackexchange.com/questions/158094