पूर्णांक प्रकार के खाली क्षेत्रों का चयन करते हुए PostgreSQL


13

मेरे पास एक मेज है और मुझे fk_fc_idमैदान के लिए एक खाली मान के साथ सभी पंक्तियों का चयन करने की आवश्यकता है (उन्हें हटाने के लिए एक प्रस्ताव के रूप में),

    Column     |            Type             |                         Modifiers
---------------+-----------------------------+------------------------------------------------------------
 di_timestamp  | timestamp without time zone |
 di_item_value | character varying(10)       |
 fk_fc_id      | integer                     |
 di_id         | integer                     | not null default nextval('data_item_di_id_seq1'::regclass)

हालांकि यह काम नहीं करता है,

# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
                                                                    ^

कोशिश Nullकरना भी काम नहीं करता है।

अगर किसी के पास इसे छाँटने के बारे में कोई सुझाव है, तो मैं बहुत आभारी रहूँगा।


1
fk_fc_id, di_timestamp, di_item_value का चयन data_item से करें जहाँ fk_fc_id शून्य है
foibs

2
PostgreSQL में तार के लिए दोहरे उद्धरण चिह्नों का उपयोग नहीं किया जाता है। एकल उद्धरण तार के लिए उपयोग किया जाता है। लेकिन आपको शून्य-लंबाई वाले तार की तुलना पूर्णांकों से नहीं करनी चाहिए! और ऑपरेटर के nullउपयोग के साथ मूल्यों की तुलना =करना हमेशा वापस आएगा nullऔर उस पंक्ति को बाहर करने का कारण होगा।
कॉलिन का टी हार्ट

जवाबों:


21

यह वास्तव में डेटाबेस प्रशासन से संबंधित नहीं है, और न ही यह वास्तव में PostgreSQL के बारे में है, लेकिन जैसा कि @foibs ने उत्तर दिया है, आपको IS NULL पर एक नज़र रखना चाहिए :

 SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id IS NULL

1
आह, मैं कोशिश कर रहा था = अशक्त होने के बजाय अशक्त है। धन्यवाद,
जेम्स

दोनों (=; आईएस) 9.4 में ठीक काम करता है
पेट्र

0

आपको एकल उद्धरण का उपयोग करना होगा:

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''

तकनीकी रूप से, आप सही हैं, SQL में एक स्ट्रिंग को एकल उद्धरणों के साथ सीमांकित किया जाना चाहिए। हालांकि, इस विशिष्ट मामले में ओपी को पहले स्थान पर एक स्ट्रिंग (खाली या नहीं) की तुलना नहीं करनी चाहिए, क्योंकि प्रश्न में कॉलम को परिभाषित किया गया है integer। जैसा कि आप स्वीकार किए गए उत्तर के तहत टिप्पणियों में पढ़ सकते हैं, ओपी ने एक खाली स्ट्रिंग की तुलना करने की कोशिश करने का केवल इसलिए फैसला किया क्योंकि उन्हें पता नहीं था कि नल की तुलना कैसे करें (जो वे वास्तव में बाद में थे)।
एंड्री एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.