You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:42:10