SQLServerCentral » SQL Server 2008 » SQL Server 2008 - General » Match Varbinary(max) with another Varbinary(max)InstantForum 2016-2 FinalSQLServerCentralhttps://www.sqlservercentral.com/Forums/SQLServerCentralThu, 27 Apr 2017 07:58:49 GMT20Match Varbinary(max) with another Varbinary(max)https://www.sqlservercentral.com/Forums/FindPost1490622.aspxi have a table with one binary column. that contains 0x00010100000101010101......00 column datalength is 35040, i am prepare this data like
@Jobbyte = COALESCE(@Jobbyte , 0x) + Cast ((Case When Sum(A.bit) >= 1 then 1 else 0 end)as binary(1))
i have to compare this binary data with another binary data and get the matching binary count. both the binary data has equal length of data
Please look below image, their is 2 binary data Binary1 and Binary2 i want to compare both binary data and get Sum of matching binary data. only one condition is when binary2's single bit is 0x01
[img]https://www.sqlservercentral/Forums/Uploads/Images/1490622-1.png[/img]
Last Row is indicate 0 = No Match, 1 = Match and last column is Sum of Last row (4) Please suggest me how can i compare , it's better if you can post a queryTue, 03 Sep 2013 13:23:26 GMTChirag#RE: Match Varbinary(max) with another Varbinary(max)https://www.sqlservercentral.com/Forums/FindPost1491073.aspxHi
To me it looks like you want to do a & (bitwise AND) on the binaries. Unfortunately for the length of the binaries that you are indicating this will not work in SQL Server. Splitting into chunks of 8 appears to work OK, but this would need to be thoroughly tested.
Also this looks really ugly and there is bound to be a better way.
[code="sql"]with sampleBins as (
select
bin1 = cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1))
,
bin2 = cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1)) + cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1))
+ cast(0 as binary(1)) + cast(1 as binary(1)) + cast(1 as binary(1)) + cast(0 as binary(1))
)
select
SUM(LEN(REPLACE(REPLACE(
CONVERT(varchar(MAX),
CAST(
CAST(SUBSTRING(b.bin1,((N - 1)*8)+1,8) as bigint)
&
CAST(SUBSTRING(b.bin2,((N - 1)*8)+1,8) as bigint)
as varbinary(MAX))
,1)
,'0',''),'x','')))
from sampleBins b
cross apply (select top (((datalength(b.bin1) - 1) / 8) + 1) N From Tally) t
[/code]
Tue, 03 Sep 2013 13:23:26 GMTmickyTRE: Match Varbinary(max) with another Varbinary(max)https://www.sqlservercentral.com/Forums/FindPost1490717.aspx[quote][b]chirag ~ (9/2/2013)[/b][hr]i have a table with one binary column. that contains 0x00010100000101010101......00 column datalength is 35040, i am prepare this data like
@Jobbyte = COALESCE(@Jobbyte , 0x) + Cast ((Case When Sum(A.bit) >= 1 then 1 else 0 end)as binary(1))
i have to compare this binary data with another binary data and get the matching binary count. both the binary data has equal length of data
Please look below image, their is 2 binary data Binary1 and Binary2 i want to compare both binary data and get Sum of matching binary data. only one condition is when binary2's single bit is 0x01
[img]https://www.sqlservercentral/Forums/Uploads/Images/1490717-1.png[/img]
Last Row is indicate 0 = No Match, 1 = Match and last column is Sum of Last row (4) Please suggest me how can i compare , it's better if you can post a query[/quote]
Please see the first "Helpful Link" in my signature line below. You don't have to post a 35KByte binary but a couple of dozen bytes would be helpful.Mon, 02 Sep 2013 18:16:48 GMTJeff ModenRE: Match Varbinary(max) with another Varbinary(max)https://www.sqlservercentral.com/Forums/FindPost1490695.aspxMy head spins...
If I understand it correctly, you have a table with bit values and you want to make some sort of comparison, and you think that a varbinary(MAX) is not what you need. But I'd say that most likely it isn't.
Why don't you present your original problem instead, and might be able to find a solution. A tip: you help yourself enormously if you post:
1) CREATE TABLE statements for your table(s).
2) INSERT statements with sample data.
3) The desired result given the sample.
4) A short description of the business rules.
This way can copy the script you post to develop a tested solution.Mon, 02 Sep 2013 15:46:52 GMTErland Sommarskog