जवाबों:
सब कुछ ANSI मानक के अनुसार है:
SQL सर्वर रिक्त स्थान के साथ तार की तुलना करने के तरीके पर ANSI / ISO SQL-92 विनिर्देश (धारा 8.2, सामान्य नियम # 3) का अनुसरण करता है। एएनएसआई मानक को तुलना में उपयोग किए जाने वाले वर्ण तार के लिए पैडिंग की आवश्यकता होती है ताकि उनकी तुलना करने से पहले उनकी लंबाई मेल खाती हो। पैडिंग सीधे WHERE और HAVING क्लॉज के शब्दार्थ को प्रभावित करती है और अन्य Transact-SQL स्ट्रिंग तुलना को प्रभावित करती है। उदाहरण के लिए, Transact-SQL स्ट्रिंग्स 'एबीसी' और 'एबीसी' को अधिकांश तुलनात्मक संचालन के बराबर मानता है।
इस नियम का एकमात्र अपवाद LIKE विधेय है। जब LIKE विधेय अभिव्यक्ति के दाईं ओर एक अनुगामी स्थान के साथ एक मान देता है, तो SQL सर्वर तुलना करने से पहले एक ही लंबाई के लिए दो मानों को पैड नहीं करता है। क्योंकि LIKE विधेय का उद्देश्य, परिभाषा के अनुसार, साधारण स्ट्रिंग समानता परीक्षणों के बजाय पैटर्न खोजों को सुविधाजनक बनाना है, यह पहले वर्णित ANSI SQL-92 विनिर्देशन के खंड का उल्लंघन नहीं करता है।
यहाँ ऊपर वर्णित सभी मामलों का एक प्रसिद्ध उदाहरण दिया गया है:
DECLARE @a VARCHAR(10)
DECLARE @b varchar(10)
SET @a = '1'
SET @b = '1 ' --with trailing blank
SELECT 1
WHERE
@a = @b
AND @a NOT LIKE @b
AND @b LIKE @a
यहाँ रिक्त स्थान और LIKEक्लॉज़ के बारे में कुछ और विवरण दिए गए हैं ।
लेकिन अगर आप उन्हें अलग करने के लिए चाहते हैं - आप का उपयोग करने के फैसला कर सकता है DATALENGTHबजाय समारोह LEN, क्योंकि
SELECT 1 WHERE LEN('John ') = LEN('John')
के बजाय 1 डाल देंगे
SELECT 1 WHERE DATALENGTH('John ') = DATALENGTH('John')
उपाय है
आप बस अपनी स्थिति में एक सफेद स्थान जोड़ सकते हैं।
set @X= 'John \n'
\nSQL सर्वर में कोई महत्व नहीं है। इसकी व्याख्या एक नई पंक्ति के रूप में नहीं की जाती है। यह वैसे भी पूछे गए सवाल का जवाब नहीं है।