MySQL 函数 IFNULL 无法与通配符一起正常工作

标签 mysql sql

我有一个 SQL 脚本,在 If Null 语句中使用通配符。 我希望显示所有其他记录,无论字段中是否有空值。

SELECT *  FROM ABC    WHERE   (Value=1 AND        
Prefix like IFNULL(${parameter:X},'%') 
AND        
Base like IFNULL(${parameter:Y},'%')
AND        
Suffix like IFNULL(${parameter:Z},'%')
AND       
Area like IFNULL(${parameter:Ax},'%')       
);

我期望结果应该显示所有值,无论区域字段值是否为空

最佳答案

不要使用like。它将过滤掉数据中的NULL值。只要这样做:

WHERE (NewestVersion = 1 AND        
      (Prefix like ${param:PrefixLookup} or ${param:PrefixLookup} is null) AND
      (Base like ${param:BaseLookup} or ${param:BaseLookup} is null) AND        
      (Suffix like ${param:SuffixLookup} or ${param:SuffixLookup} is null) AND
      (Custom2 like ${param:DRELookup} or ${param:DRELookup} is null) 

如果您有空字符串,则与 NULL 的比较将无济于事。只需使用:

WHERE (NewestVersion = 1 AND        
      (Prefix like ${param:PrefixLookup} or ${param:PrefixLookup} = '') AND
      (Base like ${param:BaseLookup} or ${param:BaseLookup} = '') AND        
      (Suffix like ${param:SuffixLookup} or ${param:SuffixLookup} = '') AND
      (Custom2 like ${param:DRELookup} or ${param:DRELookup} = '') 

关于MySQL 函数 IFNULL 无法与通配符一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57414767/

相关文章:

MySQL "simple"错误理解

mysql - MySQL 中的排名函数

php - symfony 3 的推荐时间格式是什么?

mysql - 如果经常使用它们,我应该将宽 mysql 表上的列移到左侧吗?

sql - 这个 SQL 查询应该如何构造? (Postgres)

MySQL SUM()、COUNT() 和 GROUP BY

php - 在具有相同别名的 2 个表上选择相同字段

sql - 使用相关查询时无法使用 LIMIT

MySQL:使用 IN 的嵌套 SQL

sql - 如何正确命名记录创建(插入)日期时间字段?