具有忽略条件的案例声明postgres 9.3

时间:2018-06-28 08:11:04

标签: sql postgresql select case postgresql-9.3

在我的应用程序中,以下缩写使我可以在应用程序中输入值并选择其类型,例如

:input 

在这种情况下,我创建了一个变量

:Lang1 as a varchar

我有以下代码,简单地使用case语句查询数组中有多少人说特定语言

我想知道多少学生从数组中了解一种语言,并检查输入字段中是否包含值

(Case When Length(:Lang1)>4    --I'm assuming any language has more than 4 letters
then languages[1] = :Lang1     --When this condition statement is true then I get the children 
                   --and the number of children speaking the entered language as a 1st language
else (ignore condition) end)   --Simply trying to ignore the else side of the condition

我尝试了这段代码

(Case When Length(:Lang1)>4 then languages[1] = :Language 
else cast(:Lang1 as varchar(20)) end)

错误:字符类型不同且布尔值无法匹配

和此代码

(Case When Length(:Lang1)>4 then languages[1] = :Language 
end)

产生一堆0 0 0s

此帖子与其前任有关 Part 2: how to get the Sum of a partition based query without actually pivoting并放置在以下区域

JOIN schoollevel sl ON sl.id = p.schoollevelid
GROUP BY s.studentnumber, p.firstname
 ) t
Where (Case When Length(:Lang1)>4 then languages[1] = :Lang1
    else cast(:Lang1 as varchar(20)) end)
)
select *

1 个答案:

答案 0 :(得分:3)

case表达式返回一个值,而不是可以用作条件的语法片段。您可以改用or逻辑运算符来创建此逻辑:

WHERE LENGTH(:Lang1) <= 4 OR languages[1] = :Lang1