to get different type of dates based on a date.
select
getdate()
, cast(cast(getdate() as date) as datetime) today_00hrs
, dateadd(dd,-1, cast(getdate() as date)) as yesterday_date
, cast(dateadd(dd,-1, cast(getdate() as date)) as datetime) as yesterday_00hrs
, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear
, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) as StartOfMonth
, (DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)) StartOfLastMonth
, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-3, 0) as Startof3monthsback
, DATEPART(week, GETDATE())weekofdate
, DATEADD(yy,-1,getdate() ) LastYearSameDateTime
, (DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)) LastMonth_1stday00hrs
, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) CurrentMonth_1stday00hrs
, DATENAME(year, ’12:10:30.123′)
,DATENAME(month, ’12:10:30.123′)
,DATENAME(day, ’12:10:30.123′)
,DATENAME(dayofyear, ’12:10:30.123′)
,DATENAME(weekday, ’12:10:30.123′);