Oracle:匹配一个表达式,如果表达式为null,则返回该列的所有记录


Oracle: Match an expression and if expression is null, return all records fro that column

我有一个搜索表单,用户可以在其中搜索数据库中的某些字段。如果一个字段为空,它可以匹配包括null在内的任何内容。如果在字段中输入了某些内容,则该内容应与该字段匹配,包括通配符。

我使用php作为服务器端语言。

问题是,如果搜索字段为空,我不能只使用php并将其转换为"%",因为它将不匹配null。(假设where子句是类似$value的字段A)。此外,我不能使用"fieldA like$value OR fieldA IS NULL",因为这样它将返回所有匹配的字段和为NULL的字段。

在SQL语句中有没有(相当简单的方法)做到这一点?目前,我在PHP中构建where子句,它相当麻烦。

您尝试的解决方案是检查错误的项是否为null。

如果参数为NULL,则需要一条记录始终生成TRUE;如果字段与参数匹配,则需要生成TRUE。。。

WHERE
  fieldA LIKE $value
  OR $value IS NULL

如果一个字段为空,它可以匹配包括空在内的任何内容

那么,在这种情况下,为什么不把where子句放在一起呢?

case 1: user enters "ABC"
select * from my_table where fieldA like 'ABC%';
case 2: user leaves blank
select * from my_table;

顺便说一句,小心SQL注入。