带有可能的null参数的SQL Query

时间:2017-02-21 12:55:15

标签: mysql sql

我必须查询SQL以搜索下表

姓名 - 姓氏 - 年龄

使用姓名,姓氏广告年龄作为查询的参数。

由于此查询是以dinamically方式生成的,因此可能会发生其中一个参数等于“”或null。在这种情况下,我希望获得的行为是:

  • 如果Name =“”,我想搜索姓氏和年龄而不管 名字(每个名字)。

我找到了解决此问题的可能方法,并以这种方式使用LIKE语句:

SELECT * ...
WHERE Surname like '%%' AND Name like '%%' AND Age like '%%'

当我将%%放入其中时,它会返回表格的所有记录。 这是正确的还是有另一种方式?

4 个答案:

答案 0 :(得分:2)

SQL提供了解决这些问题的方法。 您可以轻松使用(Surname IS NULL OR Name = '' OR ...)

请参阅:https://dev.mysql.com/doc/refman/5.7/en/is-null-optimization.html

Theres也是一个几乎相同问题的主题:MySQL syntax checking if parameter is null

答案 1 :(得分:0)

...
Where (IsNull(@SurName, '') = '' OR @SurName = t.SurName)
AND (IsNull(@Name, '') = '' OR @Name = t.Name)
AND (IsNull(@Age, '') = '' OR @Age = t.Age)

答案 2 :(得分:0)

对于sql server,它看起来像这样:

select *
from t
where (
    Surname like '%'+@Surname+'%'
    or coalesce(@Surname,'') = ''
    )
  and (
    Name like '%'+@Name+'%'
    or coalesce(@Name,'') = ''
    )
  and (
    Age like '%'+@Age+'%'
    or coalesce(@Age,'') = ''
    )

全能查询

答案 3 :(得分:0)

SELECT * ...
WHERE 
IF(NAME IS NULL OR NAME='',Surname LIKE '%%' AND Age LIKE '%%', Surname LIKE '%%' AND NAME LIKE '%%' AND Age LIKE '%%');