अभिव्यक्ति की stringexpression = ''
पैदावार:
TRUE
.. ''
(या किसी भी स्ट्रिंग के लिए डेटा प्रकार के साथ केवल रिक्त स्थान से मिलकर char(n)
)
NULL
.. के लिए NULL
FALSE
.. और कुछ के लिए
तो इसके लिए जाँच करें: " stringexpression
या तो NULL या खाली है" :
(stringexpression = '') IS NOT FALSE
या रिवर्स दृष्टिकोण (पढ़ने में आसान हो सकता है):
(stringexpression <> '') IS NOT TRUE
सहित किसी भी वर्ण प्रकार के लिए काम करता है char(n)
। तुलना ऑपरेटरों के बारे में मैनुअल।
या बिना अपनी मूल अभिव्यक्ति का उपयोग करें trim()
, जो char(n)
(नीचे देखें) के लिए महंगा शोर है , या अन्य चरित्र प्रकारों के लिए गलत है: केवल रिक्त स्थान से मिलकर तार खाली स्ट्रिंग के रूप में गुजरेंगे।
coalesce(stringexpression, '') = ''
लेकिन सबसे ऊपर के भाव तेज हैं।
विपरीत करना और भी सरल है: " stringexpression
न तो NULL है और न ही खाली है" :
stringexpression <> ''
यह डेटा प्रकार के बारे में है char(n)
, छोटे के लिए: character(n)
। ( char
/ character
के लिए कम कर रहे हैं char(1)
/ character(1)
।) इसका उपयोग किया जाता है Postgres में हतोत्साहित किया :
ज्यादातर स्थितियों में 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
"Null या खाली स्ट्रिंग" के लिए टेस्ट करें 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
------------------ + ----------- + ------- + ------- + --- -------- + ----------- + -----------
फू | च | च | च | च | च | च
| टी | टी | टी | टी | टी | टी
| टी | टी | टी | टी | टी | टी
नल | नल | टी | टी | टी | टी | टी
"Null या खाली स्ट्रिंग" के लिए टेस्ट करें 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
------------------ + ----------- + ------- + ------- + --- -------- + ----------- + -----------
फू | च | च | च | च | च | च
| टी | टी | टी | टी | च | च
| च | च | च | च | च | च
नल | नल | टी | टी | टी | टी | च
db <> फिडेल यहाँ
पुरानी sqlfiddle
सम्बंधित:
char
पैडिंग (और परिणामस्वरूप अंतरिक्ष अपशिष्ट) के कारण उपयोग करना लगभग हमेशा गलत विकल्प होता है। लेकिन इसके अलावा: मुझे नहीं लगता कि एक बेहतर समाधान है।