খালি স্ট্রিংস: কেন বা কখন '' সমান ''?


17

কে কেন তা ব্যাখ্যা করতে পারে

select case when '' = ' ' then 1 else 0 end, LEN(''), LEN(' '), DATALENGTH(''), DATALENGTH(' ');

উৎপাদনের

----------- ----------- ----------- ----------- -----------
1           0           0           0           1

এর মজার পরিণতি হ'ল এটি

create table test ( val varchar(10) );
insert into test values( '' );
update test set val = ' ' where val = '';

আপডেটটি প্রকৃতপক্ষে খালি স্ট্রিংটি ফাঁকা দ্বারা প্রতিস্থাপন করবে, তবে যেখানে ধারাটি সত্য হিসাবে থাকে এবং আপডেটের বিবৃতিটির বারবার কার্যকর করা হয়

(1 row(s) affected)

উত্তর:


22

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

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

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

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

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দফা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.