Using SQL Server 2000
Table1
Id date
--- ----------
001 23/01/2012
002 25/01/2012
003
004 01/02/2012
From table1, I want to display id and date is null or date is equal to current month..
Condition
-
For example current month is
02/2012means, I want to display the id 003 and 004, because 003 date is null, 004 date is equal to current month date… -
if current month is
03/2012, 004 date should not display
How to do this in SQL Server?
Expected Output
Id date
003
004 01/02/2012
It’s important to make your query sargable so that an index on your date column can be used. Thus a where clause that is of the form function(date) (where function is year, month or datepart) is bad since SQL Server can’t use an index on date.
Instead you want to frame your query so that it’s of the form
DateTime columns have, as their name implies, a TIME component. So between is tricky since you want right up until midnight on the end of the month, but not quite midnight leading in to the following month… Some people try to hack around this by subtracting 3 milliseconds from the end of the month. That’s bad and not future proof.
It’s better to make your query look like
How to get those values (and be SQL 2000 compatible…)?
One way, off the top of my head, is
and the start of the following month is obtained by adding one month to that. This gets the current date, subtracts the number of days elapsed in the current month and then adds 1. We then have a date/time equal to the first day of the month but still with a time component. A cast to float, floor and then cast back to datetime fixes that.
This could be put into a scalar or inline-table UDF, but in the interest of brevity (long answer already!), your where clause is
Hope that helps!