I am getting the following error in my WHERE
clause on the very last AND statement AND CAST(cp.EndDate...)
. I just added the CASE statement to know if the month is January and to compare the cp.startdate >= value1 OR value 2
Error:
An expression of non-boolean type specified in a context where a condition is expected, near 'and'.
My WHERE
clause:
WHERE
(CAST(cp.startdate AS DATE) >= CAST(DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0)) AS DATE)
OR --FirstDayOfCurrentMonthPriorYear
CASE
WHEN DATEPART(month,getdate()) = 1 --month is January
THEN CAST(DATEADD(month, DATEDIFF(month, 0, getdate())-1, 0) AS DATE) --FirstDayOfLastMonthPriorYear
ELSE CAST(DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, getdate()) -1, 0)) AS DATE) --FirstDayOfLastMonthPriorYear
END)
AND CAST(cp.EndDate AS DATE) <= CAST(DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0)) AS DATE) --LastDayOfCurrentMonthCurrentYear
Not sure what's wrong... any help in implementing this would be appreciated.
From a pure syntax point of view, you need to compare something to your CASE
output. Something like this would be syntactically correct.
WHERE
(
CAST(cp.startdate AS DATE) >= CAST(DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0)) AS DATE)
OR
CAST(cp.startdate AS DATE) >= CASE
WHEN DATEPART(month,getdate()) = 1 --month is January
THEN CAST(DATEADD(month, DATEDIFF(month, 0, getdate())-1, 0) AS DATE)
ELSE CAST(DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, getdate()) -1, 0)) AS DATE)
END
)
AND CAST(cp.EndDate AS DATE) <= CAST(DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0)) AS DATE)
I think this is what you are looking for:
WHERE CAST(cp.startdate AS DATE) >= CASE WHEN DATEPART(MONTH,GETDATE()) = 1
THEN DATEADD(DAY,1,EOMONTH(GETDATE(),-1))
ELSE DATEADD(YEAR,-1,DATEADD(DAY,1,EOMONTH(GETDATE(),-1)))
END --FirstDayOfCurrentMonthPriorYear
AND CAST(cp.EndDate AS DATE) <= EOMONTH(GETDATE()) --LastDayOfCurrentMonthCurrentYear
This checks that the cp.startdate
is greater than or equal to the first day of the current month in the prior year, and that the cp.enddate
is less than or equal to the last day of the current month. Replace GETDATE()
with your date of choice.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.