使用SQL查询裁剪二进制列
我有几个表,每个表都有一个具有特定大小的二进制列(即8字节、16字节、32字节等)和一个指示该二进制列中实际数据大小的大小列,我想将所有行移动到一个varbinary(MAX)表中 示例:使用SQL查询裁剪二进制列,sql,sql-server,sql-server-2008,binary-data,Sql,Sql Server,Sql Server 2008,Binary Data,我有几个表,每个表都有一个具有特定大小的二进制列(即8字节、16字节、32字节等)和一个指示该二进制列中实际数据大小的大小列,我想将所有行移动到一个varbinary(MAX)表中 示例: 我正在寻找一个SQL查询,该查询将把表的内容传输到一个具有varbinary(MAX)列的新表中,但它必须将数据裁剪到指定的大小。 例如,类似的情况可能会发生: INSERT INTO newVarBinaryTable(new_id,new_data)从oldBinaryTable中选择(id,newDa
我正在寻找一个SQL查询,该查询将把表的内容传输到一个具有varbinary(MAX)列的新表中,但它必须将数据裁剪到指定的大小。 例如,类似的情况可能会发生:
INSERT INTO newVarBinaryTable(new_id,new_data)从oldBinaryTable中选择(id,newData=crop(data,size))
注意:我的数据库在SQL Server 2008上适用于二进制列。在你的情况下,你需要这个表达式
INSERT INTO newVarBinaryTable
(new_id, new_data)
select id, cast(left(data, size) as varbinary(max))
FROM oldBinaryTable
SUBSTRING(data, 1, size)
注意8字节二进制(8)列应为0x112233445667788,而不是0x12345678。每个字节有2个十六进制字符 如果已经有一个列“size”,则可以只使用子字符串 输出
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
INSERT INTO newVarBinaryTable (new_id, new_data)
select id, substring(data, 1, size)
FROM oldBinaryTable