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