Hopefully this will be an easy one to answer.
I am working on a table that requires MTD data. One of our SQL guys told me to use
MONTH (@monthtodate)= 11
Where @monthtodate is set to GetDate() in the parameter list in SQL Server Management Studio. So in “theory”, he says, it should select the month (11) and then get today and return all the requested data in between those two dates. But I’m thinking this isn’t correct.
In looking at my data I’m starting to think that It’s just returning data for the whole month of November instead of just MTD. I guess, technically, anything that has 0 won’t be calculated. However that just means it’s poorly written code correct?
In your opinions, would this be the better way to return MTD data:
production_date <= @today and Production_Date >= DATEADD(mm, DATEDIFF(mm, 0, @today), 0)
Thanks in advance everyone!
Here’s how I do it. This should work on pretty much any version of SQL Server.
One important thing to note: at the outset, one should always establish a single value that represents ‘now’, the current moment in time. If you do not have a consistent value for now in your query, you will eventually get bit when your query is executed such that it crosses a date boundary whilst in-flight. Nothing like billing somebody for something they already paid for last month. Worst, edge-case bugs like that are difficult to catch, either by developers or by QA, since neither is likely to be working, say, at 11:59 on December 31.
The code: