从 where 子句中的 CASE 表达式返回条件(错误:'<'.)

问题描述 投票:0回答:1

在 T-SQL 中,我收到此错误

'<'.

附近的语法不正确

这是我的 T-SQL 语句:

SELECT *
FROM TableName
WHERE CStatus = 'Active'
  AND ServiceStatus = 'Active'
  AND DATEDIFF(day, OnDate, OffDate) > 0
  AND 
     CASE 
         WHEN EOMONTH(CA.OnDate) = 31 
             THEN DATEDIFF(day, OnDate, OffDate) <= 31 
         ELSE DATEDIFF(day, OnDate, OffDate) <= 30 
     END

我试图在

CASE
子句中使用
WHERE
表达式,但我收到了该错误。

我想比较

OnDate
月是否有31天,然后是31天,否则是30天。

sql sql-server t-sql sql-server-2022
1个回答
0
投票

A

case
表达式返回一个值,而不是条件的片段,因此存在语法错误。

一种方法是重写条件,使

datediff
部分保持不变,并且仅通过
case
表达式计算其比较的值:

SELECT *
FROM   TableName
WHERE  CStatus = 'Active'
  AND  ServiceStatus = 'Active'
  AND  DATEDIFF(day, OnDate, OffDate) > 0
       DATEDIFF(day, OnDate, OffDate) < CASE EOMONTH(CA.OnDate) 
                                             WHEN 31 THEN 31
                                             ELSE 30
                                        END
© www.soinside.com 2019 - 2024. All rights reserved.