2009-04-10 18 views
43

के लिए जाँच करने के लिए मैं Postgres उपयोग कर रहा हूँ और मैं इस तरह एक प्रश्न लिखने के लिए कोशिश कर रहा हूँ:Postgres - कैसे एक खाली सरणी

select count(*) from table where datasets = ARRAY[] 

यानी मुझे पता है कि कितने पंक्तियों एक के लिए एक खाली सरणी है चाहता हूँ कुछ स्तंभ, लेकिन postgres कि पसंद नहीं है:

select count(*) from super_eds where datasets = ARRAY[]; 
ERROR: syntax error at or near "]" 
LINE 1: select count(*) from super_eds where datasets = ARRAY[]; 
                  ^
+0

... यदि डेटासेट = NULL ARRAY का प्रतिनिधित्व करता है [], तो उत्तर ठीक हैं ... "ARRAY []" के बारे में, यह एक वाक्यविन्यास त्रुटि (!) है: जैसा कि डेपेज ने उत्तर दिया है, एक खाली सरणी को डेटाटाइप की भी आवश्यकता है, रोरी का एसक्यूएल स्क्रिप्ट को सुधार की आवश्यकता है, "ARRAY [] :: पूर्णांक" है। –

उत्तर

60

वाक्य रचना होना चाहिए:

SELECT 
    COUNT(*) 
FROM 
    table 
WHERE 
    datasets = '{}' 

आप उद्धरण के साथ साथ घुंघराले ब्रेसिज़ टी का उपयोग ओ सरणी अक्षर दिखाओ।

0
SELECT COUNT(*) 
FROM table 
WHERE datasets = ARRAY(SELECT 1 WHERE FALSE) 
+0

हालांकि यह काम कर सकता है, यह थोड़ा सा गन्दा दिखता है। – Rory

14

आप, तथ्य यह है कि array_upper और कार्यों array_lower, खाली सरणियों पर लौट अशक्त उपयोग कर सकते हैं तो आप कर सकते हैं:

select count(*) from table where array_upper(datasets, 1) is null; 
+0

... ठीक है अगर डेटासेट = NULL ARRAY [] का प्रतिनिधित्व करता है, लेकिन और "ARRAY []" के बारे में, यह एक वाक्यविन्यास त्रुटि (!) है। खाली सरणी कैसे बनाएं ?? –

+0

यह केवल त्रुटि है क्योंकि यह नहीं बता सकता कि यह किस प्रकार की सरणी बंद है। कास्ट जोड़ें: ARRAY का चयन करें [] :: int4 []; –

2
 
Solution Query: 
select * from table where array_column = ARRAY[NULL]::array_datatype; 
 
Example: 

table_emp:

id (int)| name (character varying) | (employee_id) (uuid[]) 
1  | john doe     | {4f1fabcd-aaaa-bbbb-cccc-f701cebfabcd, 2345a3e3-xxxx-yyyy-zzzz-f69d6e2edddd } 
2  | jane doe     | {NULL} 


select * from tab_emp where employee_id = ARRAY[NULL]::uuid[]; 

    ------- 
2  | jane doe     | {NULL} 
संबंधित मुद्दे