有没有办法选择value=all或none的所有记录,具体取决于所选的过滤器sql?

fv2wmkja  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(217)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

9个月前关门了。
改进这个问题
所以,我有一个网站,用户可以显示数据库中的所有导师。用户可以选择搜索过滤器,例如仅显示来自durbanville的导师,或仅显示女性。。。所以,问题是,我不想为每个过滤器编写代码,我想有一个函数,它将根据5个过滤器选项的输入显示所有记录。
例如:
性别:男性或女性或全部
郊区:贝尔维尔、德班维尔、布拉肯费尔或全部
年龄范围:5-10岁;11-16; 17 +; 或者全部。。。
我想有这样的东西,选择*从导师那里性别=(男性或女性或所有)和郊区=(贝尔维尔,杜班维尔,布拉肯费尔或所有)和年龄范围=(5-10;11-16; 17 +; 或全部)。

9cbw7uwe

9cbw7uwe1#

我想你可以用isnull和这样的条件-
假设输入参数是inpgen、inpsub和inpage。

SELECT ...
FROM table 
WHERE
(inpgen is null OR inpgen in ('Male','Female'))
AND (inpsub is null OR inpsub in ('Bellville', 'Durbanville', 'Brackenfell'))
AND ( inpage  is null OR inpage between 5 and 17)

所以,当用户只选择age时,其他两个条件将为null,并返回所有值。在我们的一个工具中,它需要考虑inpgen='',而不是null。

y3bcpkx1

y3bcpkx12#

作为将来的参考,一个通用的解决方案

Declare @inpgen varchar(100) = 'Female'; Declare @inpsub varchar(100) = 'Mohali'; Declare @inpage int = 23;

SELECT *
FROM Tutor t 
Where 
    (@inpgen is null OR t.Gender = @inpgen)      
    AND
    (@inpsub is null OR t.Suburb = @inpsub)
    AND
    (@inpage is null OR t.Age between @inpage and @inpage + 5)
xfb7svmp

xfb7svmp3#

是的,你在哪儿ê 杰伊。不确定您的年龄是什么数据类型。但如果年龄是char:

SELECT

* 

FROM table 
WHERE
Gender IN (('Male', 'Female') OR (Gender LIKE ('Male' AND 'Female')))
AND (Suburb is NULL OR Suburb IN ('Bellville', 'Durbanville', 'Brackenfell'))
AND (Age IN ('5-10', '11-16', '17+') OR AGE IS NULL)

如果年龄是整数:

AND ((Age = 5 < Age) OR (AGE IS NULL))

相关问题