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.