अभिव्यक्ति की 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पैडिंग (और परिणामस्वरूप अंतरिक्ष अपशिष्ट) के कारण उपयोग करना लगभग हमेशा गलत विकल्प होता है। लेकिन इसके अलावा: मुझे नहीं लगता कि एक बेहतर समाधान है।