SQL按位运算(MySql)

时间:2014-03-04 17:29:52

标签: mysql sql sql-server bit-manipulation bitwise-operators

所以在我的表中我有像这样的id和按位列

+----+---------+
| id | bitwise |
+----+---------+
| 1  | 1       |
| 2  | 6       |
| 4  | 60      |
+----+---------+

从我的c#代码我将这些名称设置为这些二进制值

Name1 = 0x0001,
Name2 = 0x0002,
Name3 = 0x0004,
Name4 = 0x0008,
Name5 = 0x0010,
Name6 = 0x0020,
Name7 = 0x0040,
Name8 = 0x0080,
Name9 = 0x0100,
Name10 = 0x0200,
Name11 = 0x0400,
Name12 = 0x0800

我想知道提取特定记录的最佳方法,例如让我们使用id = 2 及其代表值

id=2应该产生Name2, Name3

目前我不确定如果没有巨大的select IfElse {{1},我可以case从表格中稍微进入值声明。

我不是要求你解决这个问题(除非你想)我只需要知道接下来的步骤 比如如何创建一个列表,或者这个列表是否需要以表格格式存在

2 个答案:

答案 0 :(得分:1)

如果这些名称值在表格中,您可以使用JOIN

SELECT t2.name
FROM table1 t1
JOIN table2 t2
ON t1.bitwise | t2.value = t1.bitwise
WHERE t1.id = 2

答案 1 :(得分:1)

你可以写出if语句,就像这样

DECLARE @BitWiseResult varchar(max)

Select @BitWiseResult = CASE WHEN SUBSTRING(CAST(bitwise as varchar(8)),len(CAST(bitwise as varchar(8))) -1 , len(CAST(bitwise as varchar(8)))) like '1' THEN 'Name1, ' END 
                + CASE WHEN SUBSTRING(CAST(bitwise as varchar(8)),len(CAST(bitwise as varchar(8))) -1 , len(CAST(bitwise as varchar(8)))) like '2' THEN 'Name2, ' END
                + CASE WHEN SUBSTRING(CAST(bitwise as varchar(8)),len(CAST(bitwise as varchar(8))) -1 , len(CAST(bitwise as varchar(8)))) like '4' THEN 'Name3, ' END
...
....
.....           
FROM TableWithBitwiseNumber
WHERE id = 2