1 = ALL(arr) IS NULL AND 2 = ALL(arr) IS NULL
1
और 2
कोई भी हो सकता है दो अलग-अलग संख्याएं।
विकल्प और प्रदर्शन
बहुत तरीके हैं। मैंने एक त्वरित परीक्षण केस इकट्ठा किया:
SELECT arr::text
, -1 = ALL(arr) IS NULL AS xsimple
, 1 = ALL(arr) IS NULL AND 2 = ALL(arr) IS NULL AS simple
, array_remove(arr, NULL) = '{}' AS array_rem
, cardinality(array_positions(arr, NULL))
= cardinality(arr) AS array_pos
, TRUE = ALL (SELECT unnest(arr) IS NULL) AS michael
, (SELECT bool_and(e IS NULL) FROM unnest(arr) e) AS bool_and
, NOT EXISTS (SELECT unnest(arr) EXCEPT SELECT null) AS exist
FROM (
VALUES
('{1,2,NULL,3}'::int[])
, ('{1,1,1}')
, ('{2,2,2}')
, ('{NULL,NULL,NULL}')
, ('{}'::int[])
) t(arr);
arr | xsimple | simple | array_rem | array_pos | michael | bool_and | exist
------------------+---------+--------+-----------+-----------+---------+----------+-------
{1,2,NULL,3} | f | f | f | f | f | f | f
{1,1,1} | f | f | f | f | f | f | f
{2,2,2} | f | f | f | f | f | f | f
{NULL,NULL,NULL} | t | t | t | t | t | t | t
{} | f | f | t | t | t | | t
array_remove()
पोस्टग्रेज 9.3 या बाद के संस्करण की आवश्यकता है।array_positions()
पोस्टग्रेज 9.5 या बाद के संस्करण की आवश्यकता है।
chk_michael
वर्तमान में @michael द्वारा स्वीकृत उत्तर
से है .
कॉलम व्यंजक के प्रदर्शन के क्रम में हैं। सबसे तेज़ पहले।
मेरे साधारण चेक प्रदर्शन पर हावी हैं, array_remove()
के साथ अगला। बाकी नहीं रख सकते।
विशेष मामला खाली सरणी ({}
) ध्यान देने की आवश्यकता है। अपेक्षित परिणाम को परिभाषित करें और या तो एक उपयुक्त अभिव्यक्ति चुनें या एक अतिरिक्त जांच जोड़ें।
db<>fiddle यहां
- प्रदर्शन परीक्षण . के साथ
पुराना sqlfiddle
उप>
यह कैसे काम करता है?
व्यंजक 1 = ALL(arr)
पैदावार:
TRUE
.. यदि सभी तत्व 1
. हैं FALSE
.. यदि कोई तत्व <> 1
. है (कोई भी तत्व जो IS NOT NULL
)NULL
.. यदि कम से कम एक तत्व IS NULL
और कोई भी तत्व <> 1
नहीं है
इसलिए, यदि हम किसी एक तत्व को जानते हैं जो नहीं दिखाएँ (CHECK
. द्वारा लागू किया गया) बाधा), जैसे -1
, हम इसे सरल बना सकते हैं:
-1 = ALL(arr) IS NULL
अगर कोई संख्या दिखाई दे सकती है, दो अलग-अलग संख्याओं की जांच करें। परिणाम केवल NULL
हो सकता है दोनों के लिए यदि सरणी में NULL
के अलावा कुछ नहीं है . वोइला।