व्यंजक 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
संबंधित:
- स्ट्रिंग्स को स्टोर करने के लिए डेटा प्रकार "टेक्स्ट" का उपयोग करने में कोई कमी है?