IF-THEN-ELSE पोस्टग्रैसेक्ल में कथन


83

मैं निम्नलिखित करने के लिए एक postgresql क्वेरी लिखना चाहता हूँ:

if(field1 > 0,  field2 / field1 , 0)

मैंने इस क्वेरी की कोशिश की है, लेकिन यह काम नहीं कर रहा है

if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3

आपका धन्यवाद


"सशर्त अभिव्यक्तियों" (CASE) को देखें postgresql.org/docs/current/static/functions-conditional.html
पाओलो फलाबेला

जवाबों:


146

जैसा कि यहां PostgreSQL डॉक्स में कहा गया है :

SQL CASE अभिव्यक्ति एक सामान्य सशर्त अभिव्यक्ति है, जो अन्य प्रोग्रामिंग भाषाओं में / अन्यथा कथन के समान है।

कोड स्निपेट विशेष रूप से आपके प्रश्न का उत्तर दे रहा है:

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

7
जिज्ञासा से बाहर, वहाँ कोई समाधान नहीं था अगर-तो-और बयान का उपयोग कर? सवाल एक अगर-और-के लिए पूछा गया, लेकिन जवाब स्विच-केस स्टेटमेंट है।
हाबिल कैलेजो

हाय एबेल, एक विशिष्ट समस्या के समाधान के लिए पूछा गया प्रश्न। उत्तर उस विशिष्ट समस्या का समाधान करता है। SELECTउन बयानों के भीतर , जिनका आप उपयोग कर सकते हैं, जिनमें से एक है CASE, यहां प्रलेखित हैं
जोसेफ विक्टर ज़ममिट

उस स्थिति में, यह अधिक स्पष्ट होगा यदि आप उत्तर में कारण जोड़ते हैं कि क्यों अधिक कठिन है या आप इस का उपयोग करके इसे प्राप्त नहीं कर सकते हैं तो-फिर कथन।
मैक्सिमिलियानो बेकर्रा

2
@MaximilianoBecerra किया। कृपया देख लीजिये। तुम्हारे सुझाव के लिए धन्यवाद।
जोसेफ विक्टर ज़माइट

ASअनुदेश आवश्यक नहीं है। आप ऐसा कर सकते हैंEND field3
पाब्लो विलास


2

सामान्य तौर पर, के लिए एक विकल्प case when ...है coalesce(nullif(x,bad_value),y)(कि ओपी के मामले में इस्तेमाल नहीं किया जा सकता है)। उदाहरण के लिए,

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इस की
पैजेंट्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.