

Forum Newbie
Group: General Forum Members
Last Login: Wednesday, January 27, 2016 11:04 PM
Points: 4,
Visits: 50


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
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




SSC Eights!
Group: General Forum Members
Last Login: 2 days ago @ 8:30 AM
Points: 875,
Visits: 836


My 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.
Erland Sommarskog, SQL Server MVP, www.sommarskog.se




SSCDedicated
Group: General Forum Members
Last Login: Yesterday @ 8:58 PM
Points: 39,686,
Visits: 36,825


chirag ~ (9/2/2013)
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 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
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.
Jeff Moden "RBAR is pronounced "reebar" and is a "Modenism" for "RowByAgonizingRow".
First step towards the paradigm shift of writing Set Based code: Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."
(play on words) "Just because you CAN do something in TSQL, doesn't mean you SHOULDN'T." 22 Aug 2013
Favorite Quotes: "Has anyone ever told you that a query you have written runs too fast?"  Dwain Camps  6 Mar 2014
Helpful Links: How to post code problems How to post performance problems




Ten Centuries
Group: General Forum Members
Last Login: Monday, February 1, 2016 3:25 PM
Points: 1,207,
Visits: 3,250


Hi
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.
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



