I need a date function to get records between the 1st day of current year and current date (getdate())
Thanks
I need a date function to get records between the 1st day of current year and current date (getdate())
Thanks
Use this in your WHERE clause or JOIN condition
yourDateColumn >= DATEFROMPARTS(YEAR(GETDATE()),1,1)
AND yourDateColumn <= GETDATE();
If you are on a version earlier than SQL 2012, use this instead
yourDateColumn >= DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)
AND yourDateColumn <= GETDATE();
Interesting. Is
DATEFROMPARTS(YEAR(GETDATE()),1,1)
now deemed more efficient than the old:
DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)
?
What's your definition of "current date"? Including [part of] today? up to THIS millisecond? and not including 1 ms AFTER the current time? (i.e. a record that was in the process of being generated at the time the query launched).
GetDate() is NOW to the current millisecond - it is not "midnight last night" nor "midnight tonight". If that's what you want that's fine, of course :), but I just wanted to check.
I didn't mean to imply that DATEFROMPARTS is better. I don't know one way or the other. The only reason I posted both was that I wrote the DATEFROMPARTS version first and then only remembered that that was a SQL 2012 feature.
If I had to guess, I would guess there would not be any noticeable difference between the two. The DATEFROMPARTS is a little easier on the eye, so that might be one reason to use it.
that's good enough for me
I've no argument with that ... there was debate here, years and year ago, about the best way to truncate TIME from a day, or to round a date to "1st-of-the-month" and so on, and the hard-to-read DATEADD...DATEDIFF won every time because it used solely integer maths,
I wonder if nowadays truncating the time is better done with CAST the DATETIME value to DATE?
But that doesn't help with 1st-of-the-month rounding and so on.