我必须查询SQL以搜索下表
姓名 - 姓氏 - 年龄
使用姓名,姓氏广告年龄作为查询的参数。
由于此查询是以dinamically方式生成的,因此可能会发生其中一个参数等于“”或null。在这种情况下,我希望获得的行为是:
我找到了解决此问题的可能方法,并以这种方式使用LIKE语句:
SELECT * ...
WHERE Surname like '%%' AND Name like '%%' AND Age like '%%'
当我将%%放入其中时,它会返回表格的所有记录。 这是正确的还是有另一种方式?
答案 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 '%%');