当满足我的条件时,即当 reg_number = '22162' 时,我尝试应用额外的过滤器,我必须再次使用 mdate = '2023-10-20' 进行过滤,否则我不想使用 mdate 进行过滤,而只想使用 reg_number 进行过滤='13352'
代码如下:
SELECT * FROM car_details
WHERE reg_number LIKE
CASE WHEN @reg_number = '22162' THEN
'22162' AND mdate = '2023-10-20'
ELSE
'13352'
END
但是我收到如下错误:
TYPE_MISMATCH: line 15:5: Logical expression term must evaluate to a boolean (actual: varchar(5))
使用
OR
:
SELECT * FROM car_details
WHERE (reg_number = '22162' AND mdate = '2023-10-20')
OR reg_number = '13352'
CASE
语句不返回布尔值。它返回一个值,该值要么是 THEN
子句的结果,要么是 ELSE
子句的结果。
您可以将查询重新构造为:
Select *
From car_details
Where
(reg_number = '22162' and mdate = '2023-10-20') or
(reg_number = '13352' and @reg_number != '22162')
当
reg_number
为'22162'
时,也会用mdate = '2023-10-20'
进行过滤,其他情况下,只会用reg_number = '13352'
进行过滤