Postgresql में किसी सरणी का आकार कैसे प्राप्त करें


97

क्या किसी सरणी का आकार खोजने का कोई तरीका है?

उदाहरण के लिए,

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

INSERT INTO exam VALUES ( '{5,6,7}');

इससे, क्या निम्नलिखित की तरह परिणाम प्राप्त करने की कोई संभावना है,

size

0

3

जवाबों:


120

जैसा कि वायगोरोव ने उल्लेख किया है, array_lengthचाल चलेगा। या यदि आप जानते हैं कि सरणी 1-आयामी है (जो कि संभावना है) और PostgreSQL 9.4 या उच्चतर चला रहे हैं, तो आप उपयोग कर सकते हैं cardinality:

SELECT cardinality(id) FROM example;

10
अगर किसी को array_length और कार्डिनैलिटी का उपयोग करने में प्रमुख अंतर का उल्लेख किया जा सकता है जो महान होगा
Zia Ul Rehman मुगल

6
cardinalityएकल या बहुआयामी सरणी में सभी तत्वों की संख्या लौटाता है। इसलिए select cardinality(ARRAY[[1,2], [3,4]]);लौटेंगे 4, जबकि select array_length(ARRAY[[1,2], [3,4]], 1)लौटेंगे 2। यदि आप पहला आयाम गिना रहे हैं, array_lengthतो एक सुरक्षित शर्त है।
रोशाम्बो

2
यह एक textप्रकार के साथ एक क्षेत्र में सहेजे गए सरणी के लिए भी काम करता है , जबकि function array_length(text[]) does not exist;)
सैंटक्सस

1
@ZiaUlRehmanMughal भी एक खाली सरणी की सरणी लंबाई अप्रत्याशित रूप से मूल्यांकन करती है nullऔर नहीं 0जबकि cardinalityआप क्या उम्मीद करते हैं। पता नहीं वे उस तर्क के साथ क्या सोच रहे थे।
EoghanM

81

यह तुच्छ पढ़ने वाले दस्तावेज़ हैं :

SELECT array_length(id, 1) FROM example;

13
क्या आप जानते हैं कि फंक्शन का दूसरा पैरामीटर क्या है array_length। डॉक्स में वह जानकारी नहीं मिली।
सुजानशाक्य

19
@suzanshakya, अनुरोध किया सरणी की लंबाई आयाम
vyegorov

5
यह nullऔर 3बदले 0और 3ओपी उदाहरण के लिए वापस आ जाएगा । निश्चित रूप से cardinalityएक उत्तर को स्वीकार करते समय उपयोग को बढ़ावा देना चाहिए क्योंकि इसका उपयोग करना आसान है और कम अप्रत्याशित है (मैं कल्पना करता हूं कि 99.999% सरणियों का उपयोग एकल आयामी है)
EoghanM


9

सरणी के आयाम को मानने से हमेशा 1 होगा कुछ ऐसा नहीं है जिसके साथ मैं सहज महसूस करता हूं, इसलिए मैं निम्नलिखित के साथ गया:

SELECT coalesce(array_length(id, 1), 0) as size FROM example;

यह रहा है ... कम से कम एक दशक, लेकिन हम बहुत कुछ करते थे coalesceऔर यह बहुत आसान था। शायद मैं इसके लिए आराम से पहुँच रहा हूँ?


3

8.2 में पोस्टग्रेज में array_upper का उपयोग करना था।


जीवन रक्षक। लगभग सभी पदों के रूप में array_length () का उपयोग करके लोग मान रहे हैं कि लोग 9+ पोस्टग्रेट्स पर हैं;
यूनिकगिनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.