varchar
s और समानता TSQL में कांटेदार हैं। LEN
फ़ंक्शन कहता है:
दिए गए स्ट्रिंग एक्सप्रेशन के बाइट की संख्या के बजाय वर्णों की संख्या देता है, पिछली जगह को छोड़कर ।
आपको DATALENGTH
. का उपयोग करना होगा एक सही byte
प्राप्त करने के लिए प्रश्न में डेटा की गिनती। यदि आपके पास यूनिकोड डेटा है, तो ध्यान दें कि इस स्थिति में आपको जो मान मिलेगा वह टेक्स्ट की लंबाई के समान नहीं होगा।
print(DATALENGTH(' ')) --1
print(LEN(' ')) --0
जब भावों की समानता की बात आती है, तो समानता के लिए दो तारों की तुलना इस प्रकार की जाती है:
- छोटा स्ट्रिंग प्राप्त करें
- रिक्त स्थान वाला पैड जब तक लंबाई लंबी स्ट्रिंग के बराबर न हो
- दोनों की तुलना करें
यह मध्य चरण है जो अप्रत्याशित परिणाम दे रहा है - उस चरण के बाद, आप व्हाइटस्पेस के विरुद्ध व्हाइटस्पेस की प्रभावी रूप से तुलना कर रहे हैं - इसलिए उन्हें बराबर देखा जाता है।
LIKE
=
. से बेहतर व्यवहार करता है "रिक्त" स्थिति में क्योंकि यह उस पैटर्न पर रिक्त-पैडिंग नहीं करता है जिसे आप मिलान करने का प्रयास कर रहे थे:
if '' = ' '
print 'eq'
else
print 'ne'
eq
देगा जबकि:
if '' LIKE ' '
print 'eq'
else
print 'ne'
ne
देगा
LIKE
. से सावधान रहें हालांकि:यह सममित नहीं है:यह पिछली सफेद जगह को पैटर्न (आरएचएस) में महत्वपूर्ण मानता है लेकिन मिलान अभिव्यक्ति (एलएचएस) नहीं। निम्नलिखित यहाँ से लिया गया है:
declare @Space nvarchar(10)
declare @Space2 nvarchar(10)
set @Space = ''
set @Space2 = ' '
if @Space like @Space2
print '@Space Like @Space2'
else
print '@Space Not Like @Space2'
if @Space2 like @Space
print '@Space2 Like @Space'
else
print '@Space2 Not Like @Space'
@Space Not Like @Space2
@Space2 Like @Space