首页 > 解决方案 > 基于结果 Postgresql 的 case 语句

问题描述

嗨,我有一个关于案例陈述以及为什么某些陈述不起作用的问题。

(Case WHEN LENGTH(input)<=5 THEN text LIKE '%'
  ELSE text = input)

当我这样做时,它没有用,我仍然对为什么感到困惑。然而这个问题的解决方案是

(Case WHEN LENGTH(input)<=5 THEN text LIKE Concat('%',input,'%')
  ELSE text = input END)

但是,我的主要问题在下面,尽管我想回答上述问题,并且由于它们相同,因此我将其保留为一个问题。

我有一个学生仍在接受入学审查,但是这所学校是德国学校,所以我需要为他们翻译几句话,因为系统是英文的

select s.fname, s.lastname, 
(Case when s.status like 'APPROVED' then s.status = 'Genehmigt'
when s.status like 'PENDING' then s.status = 'Anstehend.'
end) as Status
from Student

我的结果在状态字段中给了我 False 所以显然我做错了什么......而且我知道有两种类型的案例陈述,所以我使用推荐的一种吗?

标签: postgresqlpostgresql-9.3

解决方案


您放在后面的表达式then

s.status = 'Genehmigt'

不是赋值,它是一个布尔表达式,所以它产生trueor falses.status =只是多余的。

select 
    fname, 
    lastname, 
    case when status = 'APPROVED' then 'Genehmigt'
    when status = 'PENDING' then 'Anstehend.'
    end as status
from student

请注意,like右侧没有通配符的字符串应该是一个简单的比较。


推荐阅读