PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

खाली या शून्य मान की जांच करने का सबसे अच्छा तरीका

व्यंजक stringexpression = '' पैदावार:

TRUE .. '' . के लिए (या किसी भी . के लिए स्ट्रिंग जिसमें डेटा प्रकार के साथ केवल रिक्त स्थान होते हैं char(n) )
NULL .. NULL . के लिए
FALSE .. किसी और चीज़ के लिए

तो जाँचने के लिए:"stringexpression या तो खाली है या खाली है" :

(stringexpression = '') IS NOT FALSE

या विपरीत दृष्टिकोण (पढ़ने में आसान हो सकता है):

(stringexpression <> '') IS NOT TRUE

char(n) . सहित किसी भी वर्ण प्रकार के लिए काम करता है . तुलना ऑपरेटरों के बारे में मैनुअल।

या trim() . के बिना अपनी मूल अभिव्यक्ति का उपयोग करें , जो char(n) . के लिए महंगा शोर है (नीचे देखें), या अन्य वर्ण प्रकारों के लिए गलत:केवल रिक्त स्थान वाले तार खाली स्ट्रिंग के रूप में पारित होंगे।

coalesce(stringexpression, '') = ''

लेकिन सबसे ऊपर के भाव तेज़ होते हैं।

विपरीत पर जोर देना और भी आसान है:"stringexpression न तो नल है और न ही खाली है" :

stringexpression <> ''

के बारे में char(n)

यह डेटा प्रकार char(n) . के बारे में है , इसके लिए संक्षिप्त:character(n) . (char / character char(1) . के लिए संक्षिप्त हैं / character(1) ।) पोस्टग्रेज में इसके उपयोग को हतोत्साहित किया जाता है:

<ब्लॉकक्वॉट>

अधिकांश स्थितियों में text या character varying इसके बजाय इस्तेमाल किया जाना चाहिए।

भ्रमित न करें char(n) अन्य, उपयोगी, वर्ण प्रकारों के साथ varchar(n) , varchar , text या "char" (दोहरे उद्धरणों के साथ)।

char(n) . में एक खाली स्ट्रिंग केवल रिक्त स्थान वाली किसी भी अन्य स्ट्रिंग से अलग नहीं है। इन सभी को n . से जोड़ दिया गया है char(n) . में स्पेस प्रकार की परिभाषा के अनुसार। यह तार्किक रूप से अनुसरण करता है कि उपरोक्त भाव char(n) . के लिए काम करते हैं साथ ही - बस इतना ही (जो अन्य चरित्र प्रकारों के लिए काम नहीं करेगा):

coalesce(stringexpression, '  ') = '  '
coalesce(stringexpression, '') = '       '

डेमो

char(n) . पर डालने पर खाली स्ट्रिंग रिक्त स्थान की किसी भी स्ट्रिंग के बराबर होती है :

SELECT ''::char(5) = ''::char(5)     AS eq1
     , ''::char(5) = '  '::char(5)   AS eq2
     , ''::char(5) = '    '::char(5) AS eq3;

परिणाम:

 eq1 | eq2 | eq3
 ----+-----+----
 t   | t   | t

char(n) . के साथ "नल या खाली स्ट्रिंग" के लिए परीक्षण करें :

SELECT stringexpression 
     , stringexpression = ''                   AS base_test
     , (stringexpression = '')  IS NOT FALSE   AS test1
     , (stringexpression <> '') IS NOT TRUE    AS test2
     , coalesce(stringexpression, '') = ''     AS coalesce1
     , coalesce(stringexpression, '  ') = '  ' AS coalesce2
     , coalesce(stringexpression, '') = '  '   AS coalesce3
FROM  (
   VALUES
     ('foo'::char(5))
   , ('')
   , ('   ')                -- not different from '' in char(n)
   , (NULL)
   ) sub(stringexpression);

परिणाम:

 stringexpression | base_test | test1 | test2 | coalesce1 | coalesce2 | coalesce3 
------------------+-----------+-------+-------+-----------+-----------+-----------
 foo              | f         | f     | f     | f         | f         | f
                  | t         | t     | t     | t         | t         | t
                  | t         | t     | t     | t         | t         | t
 null             | null      | t     | t     | t         | t         | t

text . के साथ "नल या खाली स्ट्रिंग" के लिए परीक्षण करें :

SELECT stringexpression 
     , stringexpression = ''                   AS base_test
     , (stringexpression = '')  IS NOT FALSE   AS test1
     , (stringexpression <> '') IS NOT TRUE    AS test2
     , coalesce(stringexpression, '') = ''     AS coalesce1
     , coalesce(stringexpression, '  ') = '  ' AS coalesce2
     , coalesce(stringexpression, '') = '  '   AS coalesce3
FROM  (
   VALUES
     ('foo'::text)
   , ('')
   , ('   ')                -- different from '' in a sane character types
   , (NULL)
   ) sub(stringexpression);

परिणाम:

 stringexpression | base_test | test1 | test2 | coalesce1 | coalesce2 | coalesce3 
------------------+-----------+-------+-------+-----------+-----------+-----------
 foo              | f         | f     | f     | f         | f         | f
                  | t         | t     | t     | t         | f         | f
                  | f         | f     | f     | f         | f         | f
 null             | null      | t     | t     | t         | t         | f

db<>फिडल यहाँ
पुराना sqlfiddle

संबंधित:

  • स्ट्रिंग्स को स्टोर करने के लिए डेटा प्रकार "टेक्स्ट" का उपयोग करने में कोई कमी है?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. समूहवार अधिकतम क्वेरी अनुकूलित करें

  2. PostgreSQL 8.3 के बाद से TPC-H का प्रदर्शन

  3. PostgreSQL pg_catalog तालिकाओं से अनुमतियाँ निरस्त करना

  4. पीएल/पीजीएसक्यूएल में पूर्णांक [] पर पुनरावृति

  5. Psql सभी तालिकाओं को सूचीबद्ध करें