SQL सर्वर (या Azure) में T-SQL का उपयोग करते समय LEN() और DATALENGTH() फ़ंक्शन अक्सर एक ही परिणाम लौटाएंगे, लेकिन हमेशा नहीं। ऐसे कुछ मामले हैं जहां ये फ़ंक्शन समान डेटा प्रतीत होने वाले के लिए पूरी तरह से अलग परिणाम लौटाएंगे। ऐसा इसलिए है क्योंकि LEN() . के बीच एक महत्वपूर्ण अंतर है और DATALENGTH() फ़ंक्शन काम करते हैं, जैसा कि हम यहां देखेंगे।
सबसे पहले, यहां प्रत्येक की त्वरित परिभाषा दी गई है:
LEN()- अनुगामी रिक्त स्थान को छोड़कर, निर्दिष्ट स्ट्रिंग अभिव्यक्ति के वर्णों की संख्या देता है।
DATALENGTH()- किसी भी व्यंजक को दर्शाने के लिए प्रयुक्त बाइट की संख्या देता है।
नोट "अक्षर" बनाम "बाइट्स"। यह भी ध्यान रखें कि "पिछली जगह को छोड़कर" केवल एक पर लागू होता है।
LEN() . के बीच अंतर दिखाने के लिए यहां कुछ उदाहरण दिए गए हैं और DATALENGTH() .
पिछला रिक्त स्थान
LEN() . के बीच एक अंतर और DATALENGTH() कार्य यह है कि LEN() फ़ंक्शन बहिष्कृत अनुगामी रिक्त स्थान (पिछली जगह, टैब, आदि) जबकि DATALENGTH() शामिल हैं अनुगामी रिक्त स्थान। ध्यान दें, हम केवल उन रिक्त स्थानों के बारे में बात कर रहे हैं जो अंत . पर आते हैं स्ट्रिंग की - शुरुआत में या बीच में नहीं।
यहां बिना का उदाहरण दिया गया है अनुगामी रिक्त स्थान:
SELECT
LEN('Lit') AS Len,
DATALENGTH('Lit') AS DataLength;
परिणाम:
Len DataLength --- ---------- 3 3
और यहां एक उदाहरण के साथ . है अनुगामी रिक्त स्थान:
SELECT
LEN('Lit') AS Len,
DATALENGTH('Lit') AS DataLength;
परिणाम:
Len DataLength --- ---------- 3 4
हालांकि, प्रमुख रिक्त स्थान की गणना दोनों कार्यों द्वारा की जाती है:
SELECT
LEN('Lit') AS Len,
DATALENGTH('Lit') AS DataLength;
परिणाम:
Len DataLength --- ---------- 4 4
बाइट्स बनाम कैरेक्टर
LEN() . के बीच एक और महत्वपूर्ण अंतर और DATALENGTH() क्या वह LEN() . है फ़ंक्शन वर्णों . की संख्या लौटाता है एक तार में। दूसरी ओर, DATALENGTH() बाइट्स . की संख्या लौटाता है एक अभिव्यक्ति में।
यह एक महत्वपूर्ण अंतर है क्योंकि अभिव्यक्ति में बाइट्स की संख्या जरूरी नहीं कि स्ट्रिंग में वर्णों की संख्या से मेल खाती हो। यूनिकोड स्ट्रिंग को संसाधित करते समय, DATALENGTH() वर्णों की संख्या का दोगुना लौटाएगा। ऐसा इसलिए है क्योंकि एक यूनिकोड स्ट्रिंग प्रति वर्ण 2 बाइट्स संग्रहीत करती है।
ऊपर दिए गए उदाहरण में, हमने देखा कि दोनों LEN() और DATALENGTH() Lit . शब्द के लिए वही परिणाम लौटाया (
3
) लेकिन, एक बार जब हम डेटाबेस को क्वेरी करना शुरू करते हैं, तो परिणाम इस बात पर निर्भर करेगा कि डेटा कैसे संग्रहीत किया जाता है। उदाहरण के लिए, यदि इसे varchar . के रूप में संग्रहीत किया जाता है , परिणाम समान होंगे। अगर इसे nvarchar . के रूप में संग्रहीत किया जाता है DATALENGTH() फ़ंक्शन वर्णों की संख्या से दोगुना वापस आ जाएगा। और अगर यह कहने के रूप में संग्रहीत है, char(25) , DATALENGTH() ठीक 25 वर्ण लौटाएगा।
उदाहरण
आइए निम्नलिखित क्वेरी चलाते हैं:
SELECT
ArtistName,
LEN(ArtistName) AS Len,
DATALENGTH(ArtistName) AS DataLength
FROM Artists
WHERE ArtistName = 'Lit';
इस क्वेरी के परिणाम इस बात पर निर्भर करेंगे कि डेटा कैसे संग्रहीत किया जाता है।
nvarchar(255)
अगर ArtistName कॉलम डेटा को nvarchar(255) . के रूप में संग्रहीत करता है :
ArtistName Len DataLength ---------- --- ---------- Lit 3 6
वर्कर(255)
अगर हम उस कॉलम को varchar(255) . में बदलते हैं , हमें निम्नलिखित परिणाम मिलते हैं:
ArtistName Len DataLength ---------- --- ---------- Lit 3 3
चार(25)
अगर हम उस कॉलम को char(25) . में बदलते हैं , हमें निम्नलिखित परिणाम मिलते हैं:
ArtistName Len DataLength ------------------------- --- ---------- Lit 3 25
तो शायद इस सब के लिए एक नैतिक यह है, यदि आप स्ट्रिंग की लंबाई आदि को पुनः प्राप्त करने का प्रयास करते समय अपने आप को अजीब परिणाम प्राप्त करते हुए पाते हैं, तो जांच लें कि आप सही फ़ंक्शन का उपयोग कर रहे हैं।