我在最后一个AND语句WHERE
的{{1}}子句中收到以下错误。我刚刚添加CASE语句以了解月份是否为1月并比较cp.startdate> = value1 OR value 2
错误:
在预期条件的上下文中指定的非布尔类型的表达式,接近'和'。
我的AND CAST(cp.EndDate...)
条款:
WHERE
不确定出现了什么问题......如果有任何帮助,我们将不胜感激。
答案 0 :(得分:3)
从纯语法的角度来看,您需要将某些内容与CASE
输出进行比较。这样的东西在语法上是正确的。
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)
答案 1 :(得分:3)
我认为这就是你要找的东西:
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
检查cp.startdate
是否大于或等于上一年当月的第一天,cp.enddate
小于或等于当前的最后一天月。将GETDATE()
替换为您选择的日期。