Bitwise XOR operator
SQL Server Query
-- Simplified example to demonstrate XOR
WITH CustomerPreferences AS (
SELECT 1 AS CustomerID, 1 AS Preferences UNION ALL -- Only Email
SELECT 2, 2 UNION ALL -- Only Phone
SELECT 3, 3 UNION ALL -- Both
SELECT 4, 0 -- Neither
)
SELECT
CustomerID,
Preferences,
CASE
WHEN (Preferences & 1) = 1 THEN 'Prefers Email'
ELSE 'Does not prefer Email'
END AS PrefersEmail,
CASE
WHEN (Preferences & 2) = 2 THEN 'Prefers Phone'
ELSE 'Does not prefer Phone'
END AS PrefersPhone,
CASE
WHEN (Preferences ^ 3) = 0 THEN 'Prefers Both'
WHEN (Preferences ^ 1) = 0 THEN 'Prefers Only Email'
WHEN (Preferences ^ 2) = 0 THEN 'Prefers Only Phone'
ELSE 'Prefers Neither or Mixed'
END AS PreferenceCategory
FROM CustomerPreferences;
Create SQL query with SqlQueryBuilder
var (sql, parameters) = new SqlQueryBuilder()
.WithCTETable(new Table("CustomerPreferences"), new SqlQueryBuilder()
.Select()
.Column(1, "CustomerID").Column(1, "Preferences")
.UnionAll(new SqlQueryBuilder()
.Select()
.Column(2, "CustomerID").Column(2, "Preferences")
.UnionAll(new SqlQueryBuilder()
.Select()
.Column(3, "CustomerID").Column(3, "Preferences")
.UnionAll(new SqlQueryBuilder()
.Select()
.Column(4, "CustomerID").Column(0, "Preferences")
)
)
)
)
.Select()
.Columns("CustomerID","Preferences")
.Column(new CASE().When(new ColumnArithmatic("Preferences").BitwiseAND(1).Equale(1))
.Then("Prefers Email").Else("Does not prefer Email"), "PrefersEmail")
.Column(new CASE().When(new ColumnArithmatic("Preferences").BitwiseAND(2).Equale(2))
.Then("Prefers Phone").Else("Does not prefer Phone"), "PrefersPhone")
.Column(new CASE()
.When(new ColumnArithmatic("Preferences").BitwiseXOR(3).Equale(0)).Then("Prefers Both")
.When(new ColumnArithmatic("Preferences").BitwiseXOR(1).Equale(0)).Then("Prefers Only Email")
.When(new ColumnArithmatic("Preferences").BitwiseXOR(2).Equale(0)).Then("Prefers Only Phone")
.Else("Prefers Neither or Mixed")
, "PreferenceCategory")
.From("CustomerPreferences")
.Build();
Query build by SqlQueryBuilder
WITH CustomerPreferences AS (SELECT @pMAIN_2507200126441011620 AS CustomerID, @pMAIN_2507200126441011621 AS Preferences UNION ALL SELECT @pMAIN_2507200126441011622 AS CustomerID, @pMAIN_2507200126441011623 AS Preferences UNION ALL SELECT @pMAIN_2507200126441011624 AS CustomerID, @pMAIN_2507200126441011625 AS Preferences UNION ALL SELECT @pMAIN_2507200126441011626 AS CustomerID, @pMAIN_2507200126441011627 AS Preferences) SELECT CustomerID, Preferences, CASE WHEN Preferences & @pMAIN_2507200126441011628 = @pMAIN_2507200126441011629 THEN @pMAIN_250720012644101162_10 ELSE @pMAIN_250720012644101162_11 END AS PrefersEmail, CASE WHEN Preferences & @pMAIN_250720012644101162_12 = @pMAIN_250720012644101162_13 THEN @pMAIN_250720012644101162_14 ELSE @pMAIN_250720012644101162_15 END AS PrefersPhone, CASE WHEN Preferences ^ @pMAIN_250720012644101162_16 = @pMAIN_250720012644101162_17 THEN @pMAIN_250720012644101162_18 WHEN Preferences ^ @pMAIN_250720012644101162_19 = @pMAIN_250720012644101162_20 THEN @pMAIN_250720012644101162_21 WHEN Preferences ^ @pMAIN_250720012644101162_22 = @pMAIN_250720012644101162_23 THEN @pMAIN_250720012644101162_24 ELSE @pMAIN_250720012644101162_25 END AS PreferenceCategory FROM CustomerPreferences;
Parameters (If used)
Name | Value |
---|---|
@pMAIN_2507200126441011620 | 1 |
@pMAIN_2507200126441011621 | 1 |
@pMAIN_2507200126441011622 | 2 |
@pMAIN_2507200126441011623 | 2 |
@pMAIN_2507200126441011624 | 3 |
@pMAIN_2507200126441011625 | 3 |
@pMAIN_2507200126441011626 | 4 |
@pMAIN_2507200126441011627 | 0 |
@pMAIN_2507200126441011628 | 1 |
@pMAIN_2507200126441011629 | 1 |
@pMAIN_250720012644101162_10 | Prefers Email |
@pMAIN_250720012644101162_11 | Does not prefer Email |
@pMAIN_250720012644101162_12 | 2 |
@pMAIN_250720012644101162_13 | 2 |
@pMAIN_250720012644101162_14 | Prefers Phone |
@pMAIN_250720012644101162_15 | Does not prefer Phone |
@pMAIN_250720012644101162_16 | 3 |
@pMAIN_250720012644101162_17 | 0 |
@pMAIN_250720012644101162_18 | Prefers Both |
@pMAIN_250720012644101162_19 | 1 |
@pMAIN_250720012644101162_20 | 0 |
@pMAIN_250720012644101162_21 | Prefers Only Email |
@pMAIN_250720012644101162_22 | 2 |
@pMAIN_250720012644101162_23 | 0 |
@pMAIN_250720012644101162_24 | Prefers Only Phone |
@pMAIN_250720012644101162_25 | Prefers Neither or Mixed |
Query Results:
CustomerID | Preferences | PrefersEmail | PrefersPhone | PreferenceCategory | |
---|---|---|---|---|---|
1 | 1 | 1 | Prefers Email | Does not prefer Phone | Prefers Only Email |
2 | 2 | 2 | Does not prefer Email | Prefers Phone | Prefers Only Phone |
3 | 3 | 3 | Prefers Email | Prefers Phone | Prefers Both |
4 | 4 | 0 | Does not prefer Email | Does not prefer Phone | Prefers Neither or Mixed |