使用 SQL Server 2008。
假设我有 3 个数字要存储。
- 第一个数字是任何 6 位数字
- 二是任意4bit
- 第三也是任何6位数字
例如:
declare @firstNumber_6bit tinyint = 50
declare @secondNumber_4bit tinyint = 7
declare @thirdNumber_6bit tinyint = 63
我需要将这 3 个数字存储在2 byte binary
(16 位)变量中。因此,该示例的二进制值为:
- 50 是
110010
, - 7 是
0111
- 63 是
111111
- 要存储的 2 个字节是
11001001
11111111
因此,以下任一行都应存储这些值:
declare @my3NumbersIn2Bytes binary(2) = 51711
或者
declare @my3NumbersIn2Bytes binary(2) = 0xC9FF
(对不起,如果我在大/小端弄乱了字节顺序,但这不是重点)。
使用 .net CLR 存储和检索这些数字是一项微不足道的任务,但我试图在纯 T-SQL 中解决这个问题,我们知道bit shifting
SQL Server 中没有。我看到了很多使用内存表来解决此类问题的示例,但是对于进行简单的位移位来说,这似乎完全是多余的……我在想更像substring
for bits 的东西可以解决问题。我只是想确定在过度杀伤之前没有其他方法可以解决这个问题。
所以我的问题是,存储这 3 个数字并恢复它们的最有效方法是什么?
谢谢。-