Instrukcje IF-THEN-ELSE w postgresql


Odpowiedzi:


146

Jak stwierdzono w dokumentach PostgreSQL tutaj :

Wyrażenie SQL CASE jest ogólnym wyrażeniem warunkowym, podobnym do instrukcji if / else w innych językach programowania.

Fragment kodu odpowiadający konkretnie na Twoje pytanie:

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

7
Z ciekawości, czy nie było rozwiązania wykorzystującego instrukcję jeśli-to-jeszcze? Pytanie dotyczyło „jeśli-to-inaczej”, ale odpowiedzią jest instrukcja przełączająca.
Abel Callejo

Cześć Abel, pytanie zadane w celu rozwiązania konkretnego problemu. Odpowiedź dotyczy tego konkretnego problemu. W terminie SELECToświadczenia warunkowe można wykorzystać, z których jeden jest CASE, są udokumentowane tutaj .
Joseph Victor Zammit

W takim przypadku będzie to bardziej zrozumiałe, jeśli w odpowiedzi dodasz powód, dla którego jest to trudniejsze lub dlaczego nie możesz tego osiągnąć za pomocą stwierdzenia jeśli-to.
Maximiliano Becerra

2
@MaximilianoBecerra Gotowe. Proszę spójrz. Dzięki za Twoją sugestię.
Joseph Victor Zammit

ASInstrukcja nie jest konieczne. Możesz to zrobićEND field3
Pablo Vilas


2

Ogólnie rzecz biorąc, alternatywa dla case when ...jest coalesce(nullif(x,bad_value),y)(której nie można użyć w przypadku OP). Na przykład,

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

daje:

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

czasami nie chcę widowiskowości case wheni to pasuje do rachunku
StephenBoesch
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.