শেষে স্পেস সহ বর্ণের আচরণ Var


14

আমি যখন ফাঁকা জায়গাগুলি সহ কোনও ভার্চর ব্যবহার করি এটি শেষে ফাঁকা স্থানগুলি উপেক্ষা করে।

উদা:

declare @X varchar(50)

এই...

set  @X= 'John'

...এটার মতই...

set @X= 'John           '

এগুলিকে সমান বলে বিবেচনা করে। আমি কীভাবে সিস্টেমকে এগুলি আলাদা হিসাবে স্বীকৃতি দিতে পারি?

উত্তর:


23

সবকিছু ঠিক এএনএসআই মান অনুযায়ী:

ট্র্যাকিং ফাঁকা ব্যাখ্যা :

এসকিউএল সার্ভার এএনএসআই / আইএসও এসকিউএল -২২ স্পেসিফিকেশন অনুসরণ করে (বিভাগ 8.2, সাধারণ নিয়ম # 3) কীভাবে ফাঁকা জায়গাগুলির সাথে স্ট্রিংগুলির তুলনা করতে হবে। এএনএসআই স্ট্যান্ডার্ডের তুলনাতে ব্যবহৃত অক্ষরের স্ট্রিংগুলির জন্য প্যাডিং প্রয়োজন যাতে তাদের তুলনা করার আগে তাদের দৈর্ঘ্য মিলে যায়। প্যাডিং সরাসরি ও যেখানে হ'ল শর্তের পূর্বাভাস এবং অন্যান্য লেনদেন-এসকিউএল স্ট্রিং তুলনাগুলির শব্দার্থতাতাকে প্রভাবিত করে। উদাহরণস্বরূপ, লেনদেন-এসকিউএল বেশিরভাগ তুলনামূলক ক্রিয়াকলাপের জন্য স্ট্রিংগুলিকে 'এবিসি' এবং 'অ্যাবসি' সমতুল্য বলে বিবেচনা করে।

এই নিয়মের একমাত্র ব্যতিক্রম লাইকের ভবিষ্যদ্বাণী is যখন লাইক প্রিডিকেট এক্সপ্রেশনটির ডান দিকটি একটি পিছনের স্থান সহ একটি মান দেয়, এসকিউএল সার্ভার তুলনা হওয়ার আগে দুটি মানকে একই দৈর্ঘ্যে প্যাড করে না। কারণ সংজ্ঞা অনুসারে লাইক প্রিডিটিকের উদ্দেশ্য হ'ল সাধারণ স্ট্রিং সমতা পরীক্ষার চেয়ে প্যাটার্ন অনুসন্ধানগুলি সহজতর করা, এটি পূর্বে উল্লিখিত এএনএসআই এসকিউএল -২২ স্পেসিফিকেশনের অংশটি লঙ্ঘন করে না।

এখানে উল্লিখিত সমস্ত মামলার একটি সুপরিচিত উদাহরণ:

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

এখানে সম্পর্কে আরো কিছু বিস্তারিত এর trailing ঐ খালি এবং LIKEদফা

কিন্তু আপনি যদি তাদের পার্থক্য চাই - আপনি ব্যবহার করতে সিদ্ধান্ত নিতে পারে DATALENGTHপরিবর্তে ফাংশন LEN, কারণ

SELECT 1 WHERE LEN('John ') = LEN('John')

1 এর পরিবর্তে আপনাকে 1 রাখবে

SELECT 1 WHERE DATALENGTH('John ') = DATALENGTH('John')

সমাধানটি হ'ল

  • স্ট্রিংগুলির মধ্যে পার্থক্য রাখতে ডেটাএলএনজিএইচ ফাংশনটি ব্যবহার করতে
  • স্ট্রিংটিকে এনভিচারচার টাইপে কাস্ট করতে - এসপির প্যারামিটারে এই ধরণের আরও ভালভাবে ঘোষণা করা যেতে পারে

দর্শনীয় পোস্টটি, অবশেষে কিছু ভাল তথ্য খুঁজে পেয়েছে
গ্যাসপা79

-2

আপনি কেবল নিজের অবস্থাতেই একটি সাদা স্থান যুক্ত করতে পারেন।

set @X= 'John           \n'

স্ট্রিং ফাংশনগুলিতে পিছনে স্থান


5
\nএসকিউএল সার্ভারে কোনও তাত্পর্য নেই। এটি নতুন লাইন হিসাবে ব্যাখ্যা করা হয় না। এটি যাইহোক জিজ্ঞাসা করা প্রশ্নের উত্তর নয়।
মার্টিন স্মিথ

@ মার্টিনস্মিথ তবে এটি এমএসডিএন-এ লেখা হয়েছে "আপনার স্ট্রিংয়ে যদি পিছনের জায়গাগুলি থাকতে হয় তবে আপনার শেষে একটি সাদা স্পেস ক্যারেক্টার যুক্ত করার বিষয়টি বিবেচনা করা উচিত, যাতে এসকিউএল সার্ভার স্ট্রিংটি ছাঁটাই না করে।"
ইয়েপিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.