因此,我有一个WebApp,允许用户在查询中输入参数以使用例如国家/地区的表达式获取结果
:Country -- varchar type
:Grade -- int
我有一个查询,如果用户决定是否输入参数,我将根据学生的成绩进行核对。
select count(distinct s.students),s.gradenumber
from student s
join blablabla
where (Case when length(:Grade)>0
then gradenumber = :Grade
else gradenumber between 1 and 12
END)
由于我知道某年级的学习成绩介于1-12之间,所以我可以通过这种方式解决此问题
paramter(:Country)的问题是,如果将其保留为空,则查询将无法工作。因此,我写了一个case语句来忽略用户输入为空的情况,并继续进行查询
在下面的where语句中,我检查用户输入的国家/地区名称
SELECT l.longtext as language,count(distinct s.studentnr) as Studentcount
FROM student s
join pupil p on p.id = s.pupilid
join pupillanguage pl on pl.personid = p.id
join language l on l.id = pl.languageid
join pupilnationality pn on pn.personid = p.id
join country ctf on ctf.id = pn.countryid
where (CASE when LENGTH(:Land)<3 <----- focus on the where statement
then ctf.text = :Land
else ctf.text like '%'
END)
这where语句给我0个结果 我应该使用合并吗?
where (CASE when LENGTH(:Land)<3
then ctf.text = :Land
else ctf.text like ....
END)
答案 0 :(得分:1)
在什么情况下使用OR代替
where ctf.text = :Land or ctf.text like '%countryname%'
答案 1 :(得分:0)
我建议:
where ctf.text = :Land or :Land is null
但是,您的逻辑也在检查长度。所以:
where ( (ctf.text = :Land and length(:Land) < 3) or :Land is null or length(:Land) >= 3)
答案 2 :(得分:0)
我的问题的答案是
(CASE WHEN LENGTH(:Land)>3 then ctf.text = :Land else ctf.text like '%%' end)
我遗漏了一个通配符%%
如果您碰巧知道此声明的任何替代方法,请添加!