Обрезка двоичного столбца с использованием SQL-запроса - PullRequest
2 голосов
/ 14 февраля 2011

У меня есть несколько таблиц, каждая с двоичным столбцом определенного размера (т.е. 8 байтов, 16 байтов, 32 байта и т. Д.) И столбцом размера, указывающим фактический размер данных в этом двоичном столбце.переместить все строки в таблицу varbinary (MAX).

пример:
binary data example

Я ищу запрос SQL, который перенесет содержимое таблицы в новыйтаблица со столбцом varbinary (MAX), но для этого придется обрезать данные до указанного размера.например, что-то похожее на это возможно:
INSERT INTO newVarBinaryTable (new_id, new_data) select (id, newData = crop(data, size)) FROM oldBinaryTable

Примечание. Моя БД находится на SQL Server 2008

Ответы [ 3 ]

1 голос
/ 14 февраля 2011

Подстрока работает для двоичных столбцов.В вашем случае вам понадобится выражение

SUBSTRING(data, 1, size)
1 голос
/ 14 февраля 2011

Примечание 8-байтовый двоичный (8) столбец будет 0x1122334455667788 вместо 0x12345678. Каждый байт имеет 2 шестнадцатеричных символа.

Вы можете просто использовать подстроку, если у вас уже есть столбец "размер"

declare @t table (id int identity, bin binary(8), size int)
insert @t select  0x0102030405060708, 8
insert @t select  0x0102030405000000, 5
insert @t select  0x0102030405060000, 6
insert @t select  0x0102030405060700, 7
insert @t select  0x0102030405060708, 8

select id, CONVERT(varbinary(max), substring(bin, 1, size)) as newbin
from @t
order by id

выход

id          newbin
----------- ---------------------
1           0x0102030405060708
2           0x0102030405
3           0x010203040506
4           0x01020304050607
5           0x0102030405060708

Для ваших данных

INSERT INTO newVarBinaryTable (new_id, new_data)
select id, substring(data, 1, size)
FROM oldBinaryTable
1 голос
/ 14 февраля 2011
INSERT INTO newVarBinaryTable 
    (new_id, new_data) 
    select id, cast(left(data, size) as varbinary(max))
        FROM oldBinaryTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...