Используя SQL Server 2008.
Допустим, у меня есть 3 числа для хранения.
- Первое число - любое 6-битное число
- Второй - любой 4-битный
- Третье - это также любое 6-битное число
Например:
declare @firstNumber_6bit tinyint = 50
declare @secondNumber_4bit tinyint = 7
declare @thirdNumber_6bit tinyint = 63
Мне нужно сохранить эти 3 числа в переменной 2 byte binary
(16 бит). Итак, двоичные значения для примера:
- 50 is
110010
, - 7 is
0111
- 63 is
111111
- 2 байта для хранения:
11001001
11111111
Таким образом, любая из следующих строк должна хранить эти значения:
declare @my3NumbersIn2Bytes binary(2) = 51711
or
declare @my3NumbersIn2Bytes binary(2) = 0xC9FF
(извините, если я испортил порядок байтов в big / little endian, но дело не в этом).
Сохранение и извлечение этих чисел - тривиальная задача с .net CLR, но я пытаюсь решить ее на чистом T-SQL, а, как мы знаем, в SQL Server нет bit shifting
. Я видел много примеров, в которых для решения подобных проблем используются таблицы памяти, но это кажется совершенно излишним для простого сдвига бит ... Я думал, что что-то вроде substring
для битов может помочь. Я просто хочу быть уверенным, что нет другого способа решить эту проблему, прежде чем идти по пути излишнего.
Итак, мой вопрос: как наиболее эффективно сохранить эти 3 числа и восстановить их?
Спасибо.-