<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'T-SQL', 'Code', and 'exercises'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=T-SQL,Code,exercises&amp;orTags=0</link><description>Search results matching tags 'T-SQL', 'Code', and 'exercises'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Bit-Twiddling in SQL</title><link>http://sqlblog.com/blogs/michael_coles/archive/2010/04/03/bit-twiddling-in-sql.aspx</link><pubDate>Sun, 04 Apr 2010 03:40:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:24024</guid><dc:creator>Mike C</dc:creator><description>&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;Someone posted a question to the SQL Server forum the other day asking how to count runs of zero bits in an integer using SQL.&amp;nbsp; Basically the poster wanted to know how to efficiently determine the longest contiguous string of zero-bits (known as a&amp;nbsp;run of bits) in any given&amp;nbsp;32-bit&amp;nbsp;integer.&amp;nbsp; Here are a couple of&amp;nbsp;examples to demonstrate the idea:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt;Decimal = Binary = Zero Run&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt;&lt;BR&gt;999,999,999 decimal = &lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;U&gt;&lt;SPAN style="COLOR:#0070c0;"&gt;00&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;111011 1&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;U&gt;&lt;SPAN style="COLOR:#0070c0;"&gt;00&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;11010 11&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;U&gt;&lt;SPAN style="COLOR:#0070c0;"&gt;00&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;1&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;U&gt;&lt;SPAN style="COLOR:#0070c0;"&gt;00&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;1 11111111 binary = 2 contiguous zero bits&lt;BR&gt;666,666,666 decimal = 00100111 10111100 1&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;U&gt;&lt;SPAN style="COLOR:#0070c0;"&gt;0000&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;110 10101010 binary = 4 contiguous zero bits&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;My first reaction was that SQL is not my first choice of a go-to language for bit twiddling hacks.&amp;nbsp; These types of calculations are generally most efficient in C-style compiled procedural languages with plenty of bit manipulation instructions that map almost directly one-for-one to low-level machine language instructions.&amp;nbsp; In all fairness, SQL does have some bit-level operators (&amp;amp;, |, etc. operators), but the performance isn’t as optimized as a language like C#.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;At any rate, a few different ideas were tossed around, like the simplistic loop-and-count procedural method.&amp;nbsp; Using this method you just keep a running total of the longest zero-bit run and keep looping over the bits, adjusting your running total, comparing to your largest run of zero bits, and shifting your integer one bit right each time.&amp;nbsp; But this being SQL, I decided to attack the problem from a set-based perspective.&amp;nbsp; To start with I built a 1,000,000 row table to hold random integers:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:11pt;"&gt;CREATE&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;TABLE&lt;/SPAN&gt; TempNum &lt;SPAN style="COLOR:gray;"&gt;&lt;BR&gt;(&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Num &lt;SPAN style="COLOR:blue;"&gt;BIGINT&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;NOT&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;NULL&lt;BR&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;WITH&lt;/SPAN&gt; GenerateRandom&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;AS&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; 1 &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; n&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:fuchsia;"&gt;ABS&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;CONVERT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;BIGINT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;CONVERT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;BINARY&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;CHECKSUM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;NEWID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;())))&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;%&lt;/SPAN&gt; 4294967296&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Random&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNION&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;ALL&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; n &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:fuchsia;"&gt;ABS&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;CONVERT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;BIGINT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;CONVERT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;BINARY&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;CHECKSUM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;NEWID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;())))&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;%&lt;/SPAN&gt; 4294967296&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; GenerateRandom&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&lt;/SPAN&gt; n &lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt; 1000000&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INSERT&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;INTO&lt;/SPAN&gt; TempNum &lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Num&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT&lt;/SPAN&gt; Random&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM&lt;/SPAN&gt; GenerateRandom&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;OPTION &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;MAXRECURSION 0&lt;SPAN style="COLOR:gray;"&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;Note that I used SQL Server’s BIGINT data type (64-bit integer) since I wanted to deal only in unsigned 32-bit integers.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;For my initial crack at a solution I split the 32-bit integer up into individual bits and treated the whole thing like a classic Gaps and Islands problem.&amp;nbsp; Essentially the 1 bits are islands, the 0's are gaps, and the length of the longest gap is the correct answer.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:11pt;"&gt;DBCC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt; FREEPROCCACHE&lt;SPAN style="COLOR:gray;"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;DBCC&lt;/SPAN&gt; DROPCLEANBUFFERS&lt;SPAN style="COLOR:gray;"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;WITH&lt;/SPAN&gt; Powers&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;AS&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; 0 &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; id&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;1 &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;BIGINT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; pwr&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNION&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;ALL&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; p&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;id &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POWER&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;2 &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;BIGINT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt; p&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;id &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; Powers p&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&lt;/SPAN&gt; p.id &lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt; 33&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;),&lt;BR&gt;&lt;/SPAN&gt;Islands&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;AS&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;ROW_NUMBER&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;()&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;OVER &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;PARTITION&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;BY&lt;/SPAN&gt; tn&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:blue;"&gt;ORDER&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;BY&lt;/SPAN&gt; id&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; RowNum&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tn&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;id&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;pwr&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; Powers p&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; TempNum tn&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&lt;/SPAN&gt; p&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;pwr &lt;SPAN style="COLOR:gray;"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;((&lt;/SPAN&gt;tn&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;*&lt;/SPAN&gt; 2 &lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;|&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;8589934593 &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;BIGINT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;))&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&amp;gt;&lt;/SPAN&gt; 0&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT&lt;/SPAN&gt; c&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAX&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;n&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;id &lt;SPAN style="COLOR:gray;"&gt;-&lt;/SPAN&gt; c&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;id &lt;SPAN style="COLOR:gray;"&gt;-&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; ZeroBitRun&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;INTO&lt;/SPAN&gt; #Temp&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM&lt;/SPAN&gt; Islands &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; c&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;INNER&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; Islands &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; n&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ON&lt;/SPAN&gt; n&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;RowNum &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; c&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;RowNum &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; 1&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND&lt;/SPAN&gt; n&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; c&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;WHERE&lt;/SPAN&gt; n&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;id &lt;SPAN style="COLOR:gray;"&gt;-&lt;/SPAN&gt; c&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;id &lt;SPAN style="COLOR:gray;"&gt;&amp;gt;&lt;/SPAN&gt; 1&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;GROUP&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;BY&lt;/SPAN&gt; c&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; n&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num&lt;SPAN style="COLOR:gray;"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;One interesting aside on this solution - to ensure that leading and trailing zeroes were counted for&amp;nbsp;every 32-bit number I had to shift the number left one bit (multiply by 2) and do&amp;nbsp;a bitwise OR (| operator) with 8589934593, setting both the lowest bit (bit 0) and the highest bit (bit 33) to 1.&amp;nbsp; Basically this means you’re now dealing with a 34-bit integer, with the highest and lowest bits counted as islands. &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;This ensures that for the 32 bits in between leading and trailing gaps are correctly identified.&amp;nbsp; On my PC this query took an average of just over 360 seconds (6 minutes) to identify the largest run of zero bits in 1,000,000 random numbers.&amp;nbsp; Another solution posted to the group used logarithms combined with bit-shifting in a recursive CTE.&amp;nbsp; This one completed 1,000,000 iterations in about 17.5 minutes.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;I couldn't help but think that when you get down to it, a solution to this problem should play to SQL’s strengths.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;I decided that what I really need for an efficient SQL solution to this problem is a lookup table.&amp;nbsp; Granted, a lookup table of 4+ billion rows (one row for each and every 32 bit number) would take a long time to build and probably wouldn't lend itself to IO efficiencies in SQL Server.&amp;nbsp; So I opted for a scaled down version and built a lookup table of 65,536 rows with one row representing every possible 16 bit number.&amp;nbsp; There are a lot of clever ways to grab bit-level pattern information (Google "de Bruijn sequence", for instance), but to be honest this lookup table is a one-time build and static population so I decided to keep it simple.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:11pt;"&gt;CREATE&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;TABLE&lt;/SPAN&gt; #Nybbles&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Num &lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;primary&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;key&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;not&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;null,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String &lt;SPAN style="COLOR:blue;"&gt;varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;4&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;not&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;null,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Leading &lt;SPAN style="COLOR:blue;"&gt;tinyint&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;not&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;null,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trailing &lt;SPAN style="COLOR:blue;"&gt;tinyint&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;not&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;null&lt;BR&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;INSERT&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;INTO&lt;/SPAN&gt; #Nybbles&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Leading&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trailing&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;VALUES &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0000'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 4&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 4&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;1&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0001'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 3&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;2&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0010'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 2&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0011'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 2&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;/SPAN&gt;4&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0100'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 2&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;5&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0101'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;6&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0110'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;7&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'0111'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;/SPAN&gt;8&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1000'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 3&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;9&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1001'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;10&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1010'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;11&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1011'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;/SPAN&gt;12&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1100'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 2&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;13&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1101'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;14&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1110'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;15&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:red;"&gt;'1111'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR:gray;"&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;CREATE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;TABLE&lt;/SPAN&gt; #BitMask&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Length&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;tinyint&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mask &lt;SPAN style="COLOR:blue;"&gt;varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;16&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;WITH&lt;/SPAN&gt; GetMasks&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;AS&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; 0 &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;''&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;16&lt;SPAN style="COLOR:gray;"&gt;))&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Mask&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNION&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;ALL&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;REPLICATE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'0'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; 1&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;16&lt;SPAN style="COLOR:gray;"&gt;))&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; GetMasks&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt; 16&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INSERT&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;INTO&lt;/SPAN&gt; #BitMask&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mask&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mask&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM&lt;/SPAN&gt; GetMasks&lt;SPAN style="COLOR:gray;"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;CREATE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;TABLE&lt;/SPAN&gt; BitPattern&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Num &lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;not&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;null&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;primary&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;key&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trailing &lt;SPAN style="COLOR:blue;"&gt;tinyint&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Leading &lt;SPAN style="COLOR:blue;"&gt;tinyint&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Seq &lt;SPAN style="COLOR:blue;"&gt;tinyint&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;WITH&lt;/SPAN&gt; GetBin&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;AS&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; n1&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;*&lt;/SPAN&gt; 4096 &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; n2&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;*&lt;/SPAN&gt; 256 &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; n3&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;*&lt;/SPAN&gt; 16 &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; n4&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n1&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;String &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; n2&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;String &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; n3&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;String &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; n4&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;String &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; String&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; #Nybbles n1&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; #Nybbles n2&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; #Nybbles n3&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; #Nybbles n4&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INSERT&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;INTO&lt;/SPAN&gt; BitPattern&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trailing&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Leading&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Seq&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT&lt;/SPAN&gt; g&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;MAX&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;b1&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; #BitMask b1&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;RIGHT(&lt;/SPAN&gt;g&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;String&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; b1&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; b1&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Mask&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Trailing&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;MAX&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;b2&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; #BitMask b2&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;LEFT(&lt;/SPAN&gt;g&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;String&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; b2&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; b2&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Mask&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Leading&lt;SPAN style="COLOR:gray;"&gt;,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:fuchsia;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; COALESCE&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;MAX&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;b3&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/SPAN&gt; #BitMask b3&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&lt;/SPAN&gt; &lt;SPAN style="COLOR:fuchsia;"&gt;CHARINDEX&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;b3&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Mask&lt;SPAN style="COLOR:gray;"&gt;,&lt;/SPAN&gt; g&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;String&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;&amp;gt;&lt;/SPAN&gt; 0&lt;BR&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Seq&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM&lt;/SPAN&gt; GetBin g&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;ORDER&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;BY&lt;/SPAN&gt; Num&lt;SPAN style="COLOR:gray;"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;BR&gt;&lt;BR&gt;DROP&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;TABLE&lt;/SPAN&gt; #BitMask&lt;SPAN style="COLOR:gray;"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;DROP&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;TABLE&lt;/SPAN&gt; #Nybbles&lt;SPAN style="COLOR:gray;"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;The first part of this script puts all 16 combinations of 4-bit nybbles (nybble = half a byte) and their equivalent binary formatted strings (0 = '0000', 14 = '1110') into a temp table called #Nybbles.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;There’s also a #BitMask temp table with bitmasks representing zero-bit runs.&amp;nbsp; The bitmasks are just strings of consecutive '0' characters of the necessary length (length 1 = '0', length 5 = '00000').&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;The BitPatterns table is the actual 16-bit number lookup table.&amp;nbsp; This table is populated by combining every 16-bit combination of nybbles from the #Nybbles temp table.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;This table has 4 columns:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV style="TEXT-INDENT:-0.25in;MARGIN-LEFT:38pt;mso-list:l1 level1 lfo1;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;Num is the 16-bit number&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="TEXT-INDENT:-0.25in;MARGIN-LEFT:38pt;mso-list:l1 level1 lfo1;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;Trailing is the number of zero bits trailing (on the right-hand side) in the number&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="TEXT-INDENT:-0.25in;MARGIN-LEFT:38pt;mso-list:l1 level1 lfo1;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;Leading is the number of zero bits leading (on the left-hand side) in the number&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="TEXT-INDENT:-0.25in;MARGIN-LEFT:38pt;mso-list:l1 level1 lfo1;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;Seq is the longest sequence of zero bits within the number&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;The total run time to build this lookup table was around 30 seconds on my computer.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Keep in mind that’s a one-time cost since you never have to build (or modify) the table again.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;With the information in this lookup table the query that locates the longest run of zero bits in any given 32-bit number is relatively simple:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;DBCC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt; FREEPROCCACHE&lt;SPAN style="COLOR:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;DBCC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt; DROPCLEANBUFFERS&lt;SPAN style="COLOR:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;FONT size=3&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;WITH&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt; CTE&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;FONT size=3&gt;AS&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:gray;"&gt;&lt;FONT size=3&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT&lt;/SPAN&gt; tn&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:gray;"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;WHEN&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Seq &lt;SPAN style="COLOR:gray;"&gt;&amp;gt;&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Seq &lt;SPAN style="COLOR:blue;"&gt;THEN&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:gray;"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;WHEN&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Seq &lt;SPAN style="COLOR:gray;"&gt;&amp;gt;&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading &lt;SPAN style="COLOR:blue;"&gt;THEN&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Seq &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ELSE&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ELSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:gray;"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;WHEN&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Seq &lt;SPAN style="COLOR:gray;"&gt;&amp;gt;&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading &lt;SPAN style="COLOR:blue;"&gt;THEN&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Seq &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ELSE&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Seq&lt;SPAN style="COLOR:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;WHEN&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; 16 &lt;SPAN style="COLOR:blue;"&gt;THEN&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ELSE&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Trailing&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Trailing&lt;SPAN style="COLOR:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;WHEN&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; 16 &lt;SPAN style="COLOR:blue;"&gt;THEN&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading &lt;SPAN style="COLOR:gray;"&gt;+&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ELSE&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Leading&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;AS&lt;/SPAN&gt; Leading&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM&lt;/SPAN&gt; TempNum tn &lt;SPAN style="COLOR:blue;"&gt;WITH &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;NOLOCK&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;INNER&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; BitPattern l &lt;SPAN style="COLOR:blue;"&gt;WITH &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;NOLOCK&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ON&lt;/SPAN&gt; l&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;tn&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;&amp;amp;&lt;/SPAN&gt; 65535&lt;SPAN style="COLOR:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;INNER&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; BitPattern h &lt;SPAN style="COLOR:blue;"&gt;WITH &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;NOLOCK&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ON&lt;/SPAN&gt; h&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;tn&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;Num &lt;SPAN style="COLOR:gray;"&gt;/&lt;/SPAN&gt; 65536&lt;SPAN style="COLOR:gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:gray;"&gt;&lt;FONT size=3&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;SELECT&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt; Num&lt;SPAN style="COLOR:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Seq&lt;SPAN style="COLOR:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Leading&lt;SPAN style="COLOR:gray;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Trailing&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;INTO&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt; #Temp&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;FROM&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';"&gt; CTE&lt;SPAN style="COLOR:gray;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;FONT size=3&gt;GO&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt 2pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;"&gt;&lt;FONT size=3&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;Basically you join the BitPattern lookup table on the high 16 bits and again on the low 16 bits.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;The first CASE expression in the Seq subquery performs a 3-way maximum calculation.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;It returns the largest of:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;the low word zero-bit run (l.Seq),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;the high word zero-bit run (h.Seq), or&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN-LEFT:2pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;the count of high word trailing zero-bits + the count of low word leading zero-bits (h.Trailing + l.Leading)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="MARGIN-LEFT:4.65pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:4.65pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;The other two CASE expressions return the total number of trailing and leading zero-bits in the 32-bit number.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;The CASE expression is needed to handle the case when the high or low word is all zero-bits.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:4.65pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:4.65pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;This particular solution took an average of about 6 seconds to calculate the longest zero-bit run for 1,000,000 numbers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:4.65pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-LEFT:4.65pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:11pt;"&gt;To my earlier point, I created a C# solution (which itself could have been optimized) that performed the exact same calculation for 1,000,000 random 32 bit integers in 2 seconds flat.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;So I guess there are two main points here: (1) Make sure you choose the right tool/language for the job, and (2) Whatever tool/language you choose try to play to its strengths.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;</description></item></channel></rss>