<?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 'Best Practices' and 'date range queries'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=Best+Practices,date+range+queries&amp;orTags=0</link><description>Search results matching tags 'Best Practices' and 'date range queries'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Bad habits to kick : mis-handling date / range queries</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx</link><pubDate>Fri, 16 Oct 2009 17:41:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:17840</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;&lt;i&gt;In my &lt;a href="http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/14/bad-habits-to-kick-using-alias-types.aspx" title="http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/14/bad-habits-to-kick-using-alias-types.aspx" target="_blank"&gt;last post in this series&lt;/a&gt;, I talked about using user-defined data types (alias types).&amp;nbsp; Today I wanted to discuss many of the ways in which people subject their date and time columns to very inappropriate query methodologies.&lt;/i&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;It's very easy to say, "Hey, don't do the wrong thing!"&amp;nbsp; Not so easy to actually accomplish, right?&amp;nbsp; In general, yes,
I agree.&amp;nbsp; But I see such frequent abuse of DATETIME columns in range
queries that I felt it deserved some treatment.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;b&gt;The long, long, long laundry list of offenses (apologies in advance)&lt;br&gt;&lt;/b&gt; &lt;/p&gt;


&lt;p&gt;The most frequent
faux pas I see is when someone uses regional date formats.&amp;nbsp; For
example, they want all the rows from a particular day.&amp;nbsp; First they try:&amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="red"&gt;'10/11/2009'&lt;/font&gt;&lt;font color="gray"&gt;;&amp;nbsp;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;The
first problem there is, what if the system has British regional
settings or the language is set to French?&amp;nbsp; Is that October 11th or
November 10th?&amp;nbsp; I wrote the query, and I don't even know!&amp;nbsp; It would be
a shame to pull data from the wrong month, and not even notice.&amp;nbsp; Much
better to use an unambiguous date format; in spite of what --CELKO--
will try to force you to believe, the only truly safe formats for
date/time literals in SQL Server, at least for DATETIME and SMALLDATETIME, are:&amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;YYYYMMDD&lt;br&gt;YYYY-MM-DDThh:nn[:ss[:mmm]]&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;As
an example, even if you try to use the seemingly unambiguous
YYYY-MM-DD, this can break under certain scenarios -- such as when the
user's language settings are set to French: &lt;/p&gt;


&lt;blockquote&gt;

&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SET&amp;nbsp;LANGUAGE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;FRENCH&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CONVERT&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;DATETIME&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;'2009-10-13'&lt;/font&gt;&lt;font color="gray"&gt;);&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;Result: &lt;br&gt;&lt;/p&gt;


&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;Le paramètre de langue est passé à Français.&lt;br&gt;&lt;font color="red"&gt;Msg 242, Level 16, State 3, Line 1&lt;br&gt;La conversion d'un type de données varchar en type de &lt;br&gt;données datetime a créé une valeur hors limites. &lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;For
those of you not fluent in Français, that essentially says (in my best Quebec accent), "There is
no month 13, dummy!" &amp;nbsp;This is because in French that date format is interpreted as YYYY-DD-MM. &amp;nbsp;(For some background on the attempts we've made to deprecate this interpretation, see &lt;a href="http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=290971" title="http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=290971" target="_blank"&gt;Connect #290971&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;As opposed to YYYY-MM-DD, YYYYMMDD will never break.&amp;nbsp; If you decide to use
any other format for your date string literals, at least for DATETIME
and SMALLDATETIME types, you are leaving yourself open to errors or
incorrect data should a user have different session settings, or should
the application be moved to servers with different settings.&amp;nbsp; In SQL Server 2008, the new types are a little more insulated from user or machine settings; still, I use YYYYMMDD for consistency and to be safe. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;When
the user fixes that and passes in a proper string literal format, there
is a problem with this query in most situations, since DATETIME and
SMALLDATETIME columns have a time component.&amp;nbsp; Unless you always strip
out the time when entering data (or use a computed column that does
this for you), this query should yield few, if any, rows:&lt;br&gt;&lt;/p&gt;


&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn = &lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;/font&gt;&lt;font color="gray"&gt;; &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;




&lt;p&gt;This is because the data looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;DateColumn&lt;br&gt;-----------------------&lt;br&gt;2009-10-11 00:14:32.577&lt;br&gt;2009-10-11 04:31:16.465&lt;br&gt;2009-10-11 08:45:57.714&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;What the query above is actually asking is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn = &lt;/font&gt;&lt;font color="red"&gt;'2009-10-11T00:00:00.000'&lt;/font&gt;&lt;font color="gray"&gt;; &lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;So there should be no surprise that no results are returned, since none of the values match that criteria.&lt;/p&gt;

&lt;p&gt;What
does the user do next?&amp;nbsp; The same thing I did the first time I came
across this problem.&amp;nbsp; Convert the left side of the equation to a
string, stripping off the time component:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="magenta"&gt;CONVERT&lt;/font&gt;&lt;font color="gray"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;(&lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;CHAR&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;(8), DateColumn, 112) = &lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;/font&gt;&lt;font color="gray"&gt;; &lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;NOW
I can get my data, right?&amp;nbsp; Well, yes, you can get your data all right.&amp;nbsp;
But now you've effectively eliminated the possibility of SQL Server
taking advantage of an index.&amp;nbsp; Since you've forced it to build a
nonsargable condition, this means it will have to convert every single
value in the table to compare it to the string you've presented on the
right hand side.&amp;nbsp; Another approach users take is:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn &lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;BETWEEN&lt;/font&gt; &lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;/font&gt; &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;'20091012'&lt;/font&gt;&lt;font color="gray"&gt;; &lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

Well,
this approach is okay, as long as you don't have any rows that fall on
midnight at the upper bound - which can be much more common if parts of
your application strip time from date/time values.&amp;nbsp; In that case, this
query will include data from the next day; not exactly what was
intended.&amp;nbsp; In some cases, that *is* what is intended: some people think the above query should return all the rows from October 11th, and also all the rows from October 12th.&amp;nbsp; Remember that this query can be translated to one of the following, without changing the meaning:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn &lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;BETWEEN&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;font color="red"&gt;'2009-10-11T00:00:00.000'&lt;/font&gt; &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;'2009-10-12T00:00:00.000'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;-- or&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn &amp;gt;= &lt;/font&gt;&lt;font color="red"&gt;'2009-10-11T00:00:00.000'&lt;/font&gt; &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; DateColumn &amp;lt;= &lt;/font&gt;&lt;font color="red"&gt;'2009-10-12T00:00:00.000'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;(Note that in the second example, that is greater than or equal to the first variable and less than or equal to the second variable.)&amp;nbsp; This means that you will return rows from October 12th at exactly midnight, but not at 1:00 AM, or 4:00 PM, or 11:59 PM.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;
Then the user tries this, so they can still use BETWEEN and save a few key strokes:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn &lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;BETWEEN&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;/font&gt; &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;'2009-10-11T23:59:59.997'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;-- or&lt;/font&gt;&lt;br&gt;&lt;font color="gray"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn &lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;BETWEEN&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;/font&gt; &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;DATEADD&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;(&lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;SECOND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;, -1, &lt;/font&gt;&lt;font color="red"&gt;'20091012'&lt;/font&gt;&lt;font color="gray"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;These are no good either.&amp;nbsp; If the data type of the column is SMALLDATETIME,
the comparison is going to round up, and you *still* might include data
from the next day.&amp;nbsp; For the second version, if the data type of the column is DATETIME, there is still the possibility that you are going to miss rows that have a time stamp between 11:59:59 PM and 11:59:59.997 PM.&amp;nbsp; Probably not many, but if there is even one, your data is no longer accurate.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;(Note that if you are using the DATE data type in SQL Server 2008,
or can guarantee that you always remove the time component from the
column, BETWEEN is okay.&amp;nbsp; But for consistency, I still stay away from BETWEEN.)&lt;/p&gt;

&lt;p&gt;Another thing I see a lot is when people want a range like a month or a year.&amp;nbsp; Can you believe that people write code like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;LIKE&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;font color="red"&gt;'200910%&lt;/font&gt;&lt;font color="red"&gt;'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

The
problem with this is that, even while SQL Server will implicitly
convert DateColumn to a string for you, it does *not* convert it to
CHAR(8) with style 112, which would be required for this wildcard
search to work.&amp;nbsp; (You can see what it will do "for you" when you try PRINT CURRENT_TIMESTAMP;.)&amp;nbsp; So maybe they meant to do it this way:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="magenta"&gt;CONVERT&lt;/font&gt;&lt;font color="gray"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;(&lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;CHAR&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;(8), DateColumn, 112) &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;LIKE&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;font color="red"&gt;'200910%&lt;/font&gt;&lt;font color="red"&gt;'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

But
this is still a bad idea because, like above, this creates a
nonsargable condition, and prevents an index on DateColumn from being
utilized.&amp;nbsp; And finally, how about this one:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;DATEPART&lt;/font&gt;&lt;font color="black"&gt;(&lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;YEAR&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;, DateColumn) = 2009&lt;br&gt;      &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;&lt;font color="gray"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;font&gt;&lt;font color="blue"&gt;DATEPART&lt;/font&gt;&lt;/font&gt;(&lt;font&gt;&lt;font&gt;&lt;font color="black"&gt;&lt;font color="blue"&gt;MONTH&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;, DateColumn) = 10&lt;/font&gt;&lt;font color="red"&gt;&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

This looks more like something you would see in OLAP, where you actually have measures and dimensions that will allow you to query the data this way - efficiently.&amp;nbsp; In the OLTP world, this type of nonsargable query is not going to perform any better than any of the others above, and it makes parameter passing and validation more complex as well (imagine the leap year validation you'd require for a date passed in as year, month, day when the date is February 29th).
&lt;p&gt;I'm not making *ANY* of these up; I have seen them all out there in the wild, either in code I've reviewed, systems I've inherited, or questions I've seen on the newsgroups or forums.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;b&gt;The best approach, IMHO &lt;br&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;In order to make best possible use of indexes, and to avoid capturing too few or too many rows, the best possible way to achieve the above query is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn &amp;gt;= &lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;br&gt;&lt;/font&gt;      &lt;font&gt;&lt;font color="blue"&gt;&lt;font color="magenta"&gt;&lt;/font&gt;&lt;font color="gray"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; DateColumn &amp;lt; &lt;/font&gt;&lt;font color="red"&gt;'20091012'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

Hopefully
the queries are not being written this way, and the data is actually
passed to the statement as a properly typed variable.&amp;nbsp; When you can
help SQL Server avoid implicit conversions, you should do so.&amp;nbsp; If you are intending to allow just one day at a time in your query, you could write a stored procedure like this:&lt;br&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.GetLogCountByDay&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET NOCOUNT &lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;lt;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;/font&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.GetLogCountByDay&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;Why don't I use &amp;lt; (@date + 1) there?&amp;nbsp; To enforce a best practice.&amp;nbsp; I'll
admit, I've used the lazy DATEADD shorthand for years.&amp;nbsp; However, I now
consider that a bad habit too, as it breaks with the new DATE data
types in SQL Server 2008:&amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;DECLARE&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@d&amp;nbsp;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;DATETIME2&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;7&lt;/font&gt;&lt;font color="gray"&gt;)&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="magenta"&gt;SYSDATETIME&lt;/font&gt;&lt;font color="gray"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;();&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@d&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;+&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;;&amp;nbsp;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Result: &amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 206, Level 16, State 2, Line 3&lt;br&gt;Operand type clash: datetime2 is incompatible with int&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;



&lt;p&gt;If you want to support a range of dates, then the change is minor:&amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.GetLogCountByDateRange&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@StartDate&amp;nbsp;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@EndDate&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;  &lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="#434343"&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET NOCOUNT&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@StartDate&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;lt;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@EndDate&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.GetLogCountByDateRange&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@StartDate = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="red"&gt;'20091011'&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@EndDate = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="red"&gt;'20091015'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

And if you wanted to return the counts for each day, you could do this (assuming you have a Numbers table that starts at 1):&amp;nbsp;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.GetDailyLogCountByMonth&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="#434343"&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET NOCOUNT&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WITH&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[days]&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[day]&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Number]&lt;/font&gt;&lt;font color="gray"&gt;-&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&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;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Numbers&lt;br&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;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Number]&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;lt;=&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEDIFF&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;MONTH&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month&lt;/font&gt;&lt;font color="gray"&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;d.[day]&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;t.DateColumn&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[days]&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;AS&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;d&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INNER&amp;nbsp;JOIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;AS&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;t&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;ON&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;t.DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;d.[day]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;t.DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;lt;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;d.[day]&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;GROUP&amp;nbsp;BY&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;d.[day]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;ORDER&amp;nbsp;BY&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;d.[day]&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.GetDailyLogCountByMonth&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month =&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;'20091001'&lt;/font&gt;&lt;font color="gray"&gt;;&amp;nbsp;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br&gt;&lt;b&gt;Performance comparison&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Let's compare a couple of these approaches.&amp;nbsp; First, we need to build a table and some procedures (this looks like a LOT of code, but it took about 6 seconds to create on my VM):&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;DATABASE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateTesting&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;USE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateTesting&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;&lt;br&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;(&lt;br&gt;&lt;/font&gt;&lt;font color="black"&gt;    DateColumn &lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;DATETIME&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;);&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;CREATE&amp;nbsp;CLUSTERED&amp;nbsp;INDEX&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;x&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;ON&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;SET NOCOUNT &lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;populate&amp;nbsp;a&amp;nbsp;numbers&amp;nbsp;table&amp;nbsp;with&amp;nbsp;500K&amp;nbsp;rows:&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;DECLARE&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@UpperLimit&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INT&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SET&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@UpperLimit = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="black"&gt;500000&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;WITH&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;n&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;x = &lt;/font&gt;&lt;font&gt;&lt;font color="magenta"&gt;ROW_NUMBER&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="gray"&gt;()&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;OVER &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;ORDER&amp;nbsp;BY&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;s1.[object_id]&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;.&lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;objects&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;AS&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;s1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;CROSS JOIN&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;.&lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;objects&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;AS&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;s2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;CROSS JOIN&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;.&lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;objects&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;AS&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;s3&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;CROSS JOIN&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;.&lt;/font&gt;&lt;font&gt;&lt;font color="green"&gt;objects&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;AS&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;s4&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Number]&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;x&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INTO&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Numbers&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;n&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;x&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;BETWEEN&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@UpperLimit&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;CREATE&amp;nbsp;UNIQUE&amp;nbsp;CLUSTERED&amp;nbsp;INDEX&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;n&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;ON&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Numbers&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;[Number]&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;get&amp;nbsp;500K&amp;nbsp;pretty&amp;nbsp;evenly&amp;nbsp;distributed&amp;nbsp;rows&amp;nbsp;into&amp;nbsp;the&amp;nbsp;log&amp;nbsp;table:&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;INSERT&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;SECOND&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;-&lt;/font&gt;&lt;font color="black"&gt;[Number]&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;MINUTE&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;(&lt;/font&gt;&lt;font color="black"&gt;[Number]&lt;/font&gt;&lt;font color="gray"&gt;),&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;'20090901'&lt;/font&gt;&lt;font color="gray"&gt;))&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Numbers&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;create&amp;nbsp;a&amp;nbsp;procedure&amp;nbsp;for&amp;nbsp;getting&amp;nbsp;a&amp;nbsp;day's&amp;nbsp;log&amp;nbsp;count&lt;br&gt;&lt;br&gt;--&amp;nbsp;good&amp;nbsp;way:&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Good_LogCountByDay&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date &lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp; SET NOCOUNT &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;DECLARE &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt; INT&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c = &lt;/font&gt;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;lt;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;bad&amp;nbsp;way&amp;nbsp;#1:&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByDay_1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@date &lt;/font&gt;&lt;font color="black"&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;  SET NOCOUNT &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;DECLARE &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt; INT&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c = &lt;/font&gt;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CONVERT&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;CHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;8&lt;/font&gt;&lt;font color="gray"&gt;),&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;112&lt;/font&gt;&lt;font color="gray"&gt;) =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@date&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;bad&amp;nbsp;way&amp;nbsp;#2:&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByDay_2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@year&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INT&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INT&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@day&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INT&lt;br&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp; SET NOCOUNT &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;DECLARE &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt; INT&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c = &lt;/font&gt;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEPART&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;YEAR&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;) =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@year&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEPART&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;MONTH&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;) =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@month&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEPART&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;) =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@day&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;create&amp;nbsp;procedures&amp;nbsp;for&amp;nbsp;getting&amp;nbsp;a&amp;nbsp;month's&amp;nbsp;log&amp;nbsp;count&lt;br&gt;&lt;br&gt;--&amp;nbsp;good&amp;nbsp;way:&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Good_LogCountByMonth&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month &lt;/font&gt;&lt;font color="black"&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;  SET NOCOUNT &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;DECLARE &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt; INT&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c = &lt;/font&gt;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;&amp;lt;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;MONTH&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;bad&amp;nbsp;way&amp;nbsp;#1:&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByMonth_1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month &lt;/font&gt;&lt;font color="black"&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLDATETIME&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp; SET NOCOUNT &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;DECLARE &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt; INT&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c = &lt;/font&gt;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CONVERT&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;CHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;8&lt;/font&gt;&lt;font color="gray"&gt;),&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;112&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LIKE&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CONVERT&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;CHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;6&lt;/font&gt;&lt;font color="gray"&gt;),&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@Month&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;112&lt;/font&gt;&lt;font color="gray"&gt;)&amp;nbsp;+&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;'%'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;--&amp;nbsp;bad&amp;nbsp;way&amp;nbsp;#2:&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByMonth_2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@year&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INT&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;INT&lt;br&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET NOCOUNT &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;DECLARE &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt; INT&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font&gt;&lt;font color="#434343"&gt;@c = &lt;/font&gt;&lt;/font&gt;&lt;font color="magenta"&gt;COUNT&lt;/font&gt;&lt;font color="gray"&gt;(*)&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.SomeLogTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEPART&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;YEAR&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;) =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@year&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="gray"&gt;AND&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEPART&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;MONTH&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateColumn&lt;/font&gt;&lt;font color="gray"&gt;) = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="#434343"&gt;@month&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Just by looking at it, you probably have a good idea how this going
to end.&amp;nbsp; All the same, we can test each set of stored procedures in two different ways:&lt;/p&gt;


&lt;p&gt;(a) Getting the data for a single day&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, let's just do a one-to-one-to-one comparison of the execution plan, just to see what we get:&lt;br&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Good_LogCountByDay &lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;@date&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; = &lt;/font&gt;&lt;font color="red"&gt;'20091005'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByDay_1 &lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;@date&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; = &lt;/font&gt;&lt;font color="red"&gt;'20091005'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByDay_2 &lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;@year&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; = 2009&lt;/font&gt;&lt;font color="gray"&gt;, @month = &lt;/font&gt;&lt;font color="black"&gt;10&lt;/font&gt;&lt;font color="gray"&gt;, @day = &lt;/font&gt;&lt;font color="black"&gt;5&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;font color="gray"&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

As expected, the "Good" version of the procedure has a far more favorable plan, using a clustered index seek as opposed to a clustered index scan.&amp;nbsp; Here is how the plans compare (&lt;a href="http://sqlblog.com/files/folders/17836/download.aspx" title="http://sqlblog.com/files/folders/17836/download.aspx" target="_blank"&gt;click to enlarge&lt;/a&gt;):&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;&lt;a href="http://sqlblog.com/files/folders/17836/download.aspx" title="http://sqlblog.com/files/folders/17836/download.aspx" target="_blank"&gt;&lt;img src="http://sqlblog.com/files/folders/17836/download.aspx" width="329" border="1" height="285"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;/li&gt;

&lt;li&gt;In case the differences in the plan do not highlight the performance implications, let's run each procedure 1000 times, to see how long it takes.&amp;nbsp; Remember to turn off the "Include Actual Execution Plan" option!&lt;br&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Good_LogCountByDay &lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;@date&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; = &lt;/font&gt;&lt;font color="red"&gt;'20091005'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;font color="black"&gt; 1000&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByDay_1 &lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;@date&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; = &lt;/font&gt;&lt;font color="red"&gt;'20091005'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;font color="black"&gt; 1000&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByDay_2 &lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;@year&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; = 2009&lt;/font&gt;&lt;font color="gray"&gt;, @month = &lt;/font&gt;&lt;font color="black"&gt;10&lt;/font&gt;&lt;font color="gray"&gt;, @day = &lt;/font&gt;&lt;font color="black"&gt;5&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;font color="black"&gt; 1000&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

Results:


&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;2009-10-16 12:05:06.123&lt;br&gt;2009-10-16 12:05:07.063 (~1 second)&lt;br&gt;2009-10-16 12:11:09.650 (~6 minutes, 2 seconds)&lt;br&gt;2009-10-16 12:12:46.197 (~1 minute, 46 seconds)&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;So, clearly the date range query is far superior to the other two.&amp;nbsp; And while the execution plans for the two "bad" versions of the procedure showed that their costs should be roughly equivalent, in reality it turns out that the procedure that handles the CONVERT() on the left-hand side is far more costly, at least in terms of duration, than the version that uses DATEPART() to extract the year, month and day.&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(b) Getting the data for a month&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's turn "Include Actual Execution Plan" back on, and compare the plans for the next set of procedures:&lt;br&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Good_LogCountByMonth&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month = &lt;/font&gt;&lt;font color="red"&gt;'20091001'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByMonth_1&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month = &lt;/font&gt;&lt;font color="red"&gt;'20091001'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByMonth_2&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@year = &lt;/font&gt;&lt;font color="black"&gt;2009&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month = &lt;/font&gt;&lt;font color="black"&gt;10&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

We see a very similar result to the above, where the "good" procedure uses a clustered index seek, and the "bad" procedures use a scan (&lt;a href="http://sqlblog.com/files/folders/17839/download.aspx" title="http://sqlblog.com/files/folders/17839/download.aspx" target="_blank"&gt;click to enlarge&lt;/a&gt;):&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;&lt;a href="http://sqlblog.com/files/folders/17839/download.aspx" title="http://sqlblog.com/files/folders/17839/download.aspx" target="_blank"&gt;&lt;img src="http://sqlblog.com/files/folders/17839/download.aspx" width="327" border="1" height="278"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;br&gt;
  
&lt;/li&gt;
&lt;li&gt;Now, let's try these procedures 1000 times each, and measure how long they take (again, you don't want to run these loops with execution plan enabled):&lt;br&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Good_LogCountByMonth&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="red"&gt;'20091001'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; 1000&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByMonth_1&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="red"&gt;'20091001'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; 1000&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.Bad_LogCountByMonth_2&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@year = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="black"&gt;2009&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@month = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="black"&gt;10&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="black"&gt; 1000&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;CURRENT_TIMESTAMP&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

Results:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;2009-10-16 12:16:59.727&lt;br&gt;2009-10-16 12:17:04.383 (~5 seconds)&lt;br&gt;2009-10-16 12:21:40.640 (~4 minutes, 36 seconds)&lt;br&gt;2009-10-16 12:23:13.950 (~1 minute, 33 seconds)&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;Again we see that the date range query performs quite well compared to the other two, and that the CONVERT() version takes far longer to complete than the DATEPART() version.&amp;nbsp; I guess if you are going to continue to use a "bad" approach, you can at least easily determine which is the lesser of two evils.&amp;nbsp; :-)&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is not surprising that the performance aspect of the "good" approach shows significant improvement over the nonsargable versions.&amp;nbsp; I could probably also demonstrate cases where you accidentally retrieve too few rows, or too many rows -- but this article seems to be getting a little long already, so I'll leave the data correctness discussion for another day.
&lt;/p&gt;

&lt;p&gt;Don't forget to clean up:
&lt;/p&gt;



&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;USE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[master]&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;DROP&amp;nbsp;DATABASE&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DateTesting&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;&lt;b&gt;&lt;br&gt;A few other tidbits &lt;/b&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;As an aside, if you only want whole dates, make
sure your input validation is functional and that users know what
format to enter.&amp;nbsp; Nothing can go right if you let users enter freeform
dates and some of them enter d/m/y and others enter m/d/y.&amp;nbsp; Safest to
use a calendar control / date picker, then you can dictate exactly what
the format is.&amp;nbsp; And to be safe, sanitize the input by converting it to
midnight, e.g.:&lt;/p&gt;



&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SET&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@DateInput = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="magenta"&gt;DATEDIFF&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@DateInput&lt;/font&gt;&lt;font color="gray"&gt;);&amp;nbsp;&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you want more control over beginning and end ranges (let's say for a month-based procedure, where you want to report on whole months), you can do this:&lt;/p&gt;



&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;-moz-background-clip:border;-moz-background-origin:padding;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@StartDate = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;-&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="#434343"&gt;@d&lt;/font&gt;&lt;font color="gray"&gt;),&amp;nbsp;&lt;/font&gt;&lt;font color="magenta"&gt;DATEDIFF&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;DAY&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@StartDate&lt;/font&gt;&lt;font color="gray"&gt;)),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@EndDate&amp;nbsp;&amp;nbsp; = &lt;/font&gt;&lt;font color="blue"&gt;&lt;/font&gt;&lt;font color="magenta"&gt;DATEADD&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;MONTH&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@StartDate&lt;/font&gt;&lt;font color="gray"&gt;);&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Finally, I have seen stored procedures
where DATETIME values are passed in as CHAR(8) or CHAR(10).&amp;nbsp; Don't
pass a date into a stored procedure using a string-based parameter: always use
properly typed parameters.&amp;nbsp; If your client-side validation is broken or
being bypassed, this can cause problems you can stomp further up the chain by using the correct data type in the first place.&amp;nbsp; &lt;br&gt;&lt;/p&gt;
&lt;br&gt;&lt;b&gt;Summary &lt;br&gt;&lt;/b&gt;
&lt;p&gt;The main take-away points I was trying to get across in this post are:&lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;avoid ambiguous formats for date-only literals;&lt;/li&gt;

&lt;li&gt;avoid BETWEEN for range queries against DATETIME, SMALLDATETIME, DATETIME2, and DATETIMEOFFSET;&lt;/li&gt;

&lt;li&gt;avoid calculations on the left-hand side of the WHERE clause; and,&lt;/li&gt;

&lt;li&gt;avoid treating dates like strings.&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
For a lot more helpful information on date and time, see Tibor Karazsi's article, "&lt;a href="http://www.karaszi.com/SQLServer/info_datetime.asp" title="http://www.karaszi.com/SQLServer/info_datetime.asp" target="_blank"&gt;The ultimate guide to the datetime datatypes&lt;/a&gt;."&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Over the past couple of weeks, I have developed a series of "Bad habits to kick" articles, in an
effort to motivate people to drop some of the things that I hate to see
when I inherit code.&amp;nbsp; I have several more ideas in development, and I'll gladly take suggestions for future articles, but this should be the last post in the series for at least a few days.&amp;nbsp; I hope the series has been interesting.&lt;/i&gt;&lt;br&gt;</description></item></channel></rss>