PostgreSQL中的IF-THEN-ELSE语句


Answers:


144

如PostgreSQL的文档中阐明在这里

SQL CASE表达式是通用条件表达式,类似于其他编程语言中的if / else语句。

专门回答您的问题的代码段:

SELECT field1, field2,
  CASE
    WHEN field1>0 THEN field2/field1
    ELSE 0
  END 
  AS field3
FROM test

7
出于好奇,使用if-then-else语句是否没有解决方案?这个问题要求一个if-then-else,但是答案是一个case-case语句。
Abel Callejo

嗨,亚伯,这个问题要求解决特定问题。答案解决了这个特定问题。在SELECT语句中,您可以使用其中的条件CASE,在此处进行了说明。
约瑟夫·维克多·扎米特

在这种情况下,如果在答案中添加为什么更加困难或为什么无法使用if-then语句来实现这一点,将会更加清楚。
Maximiliano Becerra

2
@MaximilianoBecerra完成。请看一下。感谢您的建议。
约瑟夫·维克多·扎米特

AS说明不是必需的。您可以这样做END field3
Pablo Vilas


1

通常,替代方法case when ...coalesce(nullif(x,bad_value),y)(在OP的情况下不能使用)。例如,

select coalesce(nullif(y,''),x), coalesce(nullif(x,''),y), *
from (     (select 'abc' as x, '' as y)
 union all (select 'def' as x, 'ghi' as y)
 union all (select '' as x, 'jkl' as y)
 union all (select null as x, 'mno' as y)
 union all (select 'pqr' as x, null as y)
) q

给出:

 coalesce | coalesce |  x  |  y  
----------+----------+-----+-----
 abc      | abc      | abc | 
 ghi      | def      | def | ghi
 jkl      | jkl      |     | jkl
 mno      | mno      |     | mno
 pqr      | pqr      | pqr | 
(5 rows)

有时我不想参加case when
选美比赛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.