SQL条件过滤TYPE_MISMATCH报错求助:按需添加额外过滤条件
解决SQL动态过滤的类型不匹配错误
错误原因
你写的SQL里,CASE语句试图返回带逻辑判断的字符串,但WHERE子句需要的是布尔值(真/假),类型不匹配导致了TYPE_MISMATCH报错。这种写法完全不符合SQL语法逻辑——reg_number LIKE后面只能跟字符串,不能直接拼接AND条件。
正确写法
方法1:直接组合逻辑条件(兼容性最好)
SELECT * FROM car_details WHERE (@reg_number = '22162' AND reg_number = '22162' AND mdate = '2023-10-20') OR (@reg_number != '22162' AND reg_number = '13352')
这种写法把两种业务场景用OR拆分,每个场景先判断变量值,再叠加对应的过滤规则,数据库能直接解析出布尔结果,不会有类型问题。
方法2:用CASE返回布尔表达式(部分数据库支持)
SELECT * FROM car_details WHERE CASE WHEN @reg_number = '22162' THEN (reg_number = '22162' AND mdate = '2023-10-20') ELSE (reg_number = '13352') END
这里CASE的每个分支返回的是布尔判断结果,直接作为WHERE的条件。如果你的数据库(如MySQL)不支持直接将布尔结果作为条件,加上= TRUE即可:
SELECT * FROM car_details WHERE CASE WHEN @reg_number = '22162' THEN (reg_number = '22162' AND mdate = '2023-10-20') ELSE (reg_number = '13352') END = TRUE
内容的提问来源于stack exchange,提问作者adss4
相关产品推荐
相关产品推荐

