IF-THEN-ELSE-Anweisungen in postgresql


Antworten:


143

Wie in den PostgreSQL-Dokumenten hier angegeben :

Der SQL CASE-Ausdruck ist ein generischer bedingter Ausdruck, ähnlich den if / else-Anweisungen in anderen Programmiersprachen.

Code-Snippet zur spezifischen Beantwortung Ihrer Frage:

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

7
Gab es aus Neugier keine Lösung mit der Wenn-Dann-Sonst-Anweisung? Die Frage wurde nach einem Wenn-Dann-Sonst gestellt, aber die Antwort ist eine Switch-Case-Anweisung.
Abel Callejo

Hallo Abel, die Frage nach der Lösung eines bestimmten Problems. Die Antwort befasst sich mit diesem spezifischen Problem. Innerhalb SELECTAussagen können die conditionals Sie verwenden, von denen eine CASE, dokumentiert hier .
Joseph Victor Zammit

In diesem Fall wird klarer, wenn Sie in der Antwort den Grund hinzufügen, warum dies schwieriger ist oder warum Sie dies mit der if-then-Anweisung nicht erreichen können.
Maximiliano Becerra

2
@ MaximilianoBecerra Fertig. Bitte schau es dir an. Danke für Ihren Vorschlag.
Joseph Victor Zammit

Die ASAnweisung ist nicht erforderlich. Sie können dies tunEND field3
Pablo Vilas


1

Im Allgemeinen ist eine Alternative zu case when ...ist coalesce(nullif(x,bad_value),y)(die nicht im OP Fall verwendet werden können). Zum Beispiel,

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

gibt:

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

manchmal will ich nicht die Pracht von case whenund das passt zur Rechnung
javadba
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.