কেউ কী ব্যাখ্যা করতে পারে যে টিএসকিউএল-এ COALESCE কীভাবে কাজ করে? বাক্য গঠনটি নিম্নরূপ
সংযোগ (x, y)
এই ফাংশনটির এমএসডিএন ডকুমেন্টটি বেশ অস্পষ্ট
কেউ কী ব্যাখ্যা করতে পারে যে টিএসকিউএল-এ COALESCE কীভাবে কাজ করে? বাক্য গঠনটি নিম্নরূপ
সংযোগ (x, y)
এই ফাংশনটির এমএসডিএন ডকুমেন্টটি বেশ অস্পষ্ট
উত্তর:
আমাকে বলা হয়েছে যে COALESCE ISNULL এর চেয়ে কম ব্যয়বহুল, তবে গবেষণা এটি নির্দেশ করে না। আইএসএনএলএল কেবলমাত্র দুটি পরামিতি নেয়, ক্ষেত্রটি ন্যূনুএলএল জন্য মূল্যায়ন করা হচ্ছে, এবং ফলাফলটি যদি এটি নুল হিসাবে মূল্যায়ন করা হয় তবে আপনি চান। COALESCE যে কোনও প্যারামিটারের সংখ্যা নেবে এবং প্রথম মানটি যেটি শূন্য নয় তা ফিরিয়ে দেবে।
সেখানে বিস্তারিত অনেক পুঙ্খানুপুঙ্খ বর্ণনা আছে এখানে http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/
আপনি কেন ডকুমেন্টেশনটি অস্পষ্ট বলে মনে করেন তা নিশ্চিত।
এটি কেবল এক এক করে সমস্ত পরামিতিগুলির মধ্য দিয়ে যায় এবং এটি প্রথমটি ফিরে আসে NOT NULL
।
COALESCE(NULL, NULL, NULL, 1, 2, 3)
=> 1
COALESCE(1, 2, 3, 4, 5, NULL)
=> 1
COALESCE(NULL, NULL, NULL, 3, 2, NULL)
=> 3
COALESCE(6, 5, 4, 3, 2, NULL)
=> 6
COALESCE(NULL, NULL, NULL, NULL, NULL, NULL)
=> NULL
এটি বেশ কয়েকটি সংখ্যক পরামিতি গ্রহণ করে, তবে সেগুলি একই ডেটা-টাইপের হওয়া উচিত। (তারা একই ডেটা-টাইপ না হন, তাহলে তারা পরোক্ষভাবে একটি যথাযথ তথ্য-টাইপ ব্যবহার কাস্ট পেতে প্রাধান্য ডাটা-টাইপ অর্ডার ।)
এটি ISNULL()
কেবল দুটি নয় বরং একাধিক পরামিতির জন্য।
এটিও ANSI-SQL
, যেখানে ISNULL()
নেই তেমন।
ISNULL
প্রথম প্যারামিটারের মতো একই ডেটাটাইপের সাহায্যে কোনও মান ফেরত আসে
expressions
, CASE এর সাথে তুলনা করে, ISNULL এর সাথে তুলনা করে এবং শেষ পর্যন্ত কোনও ফলাফল ছাড়াই একটি উদাহরণ। তারপরে অনেকগুলি বিশদ সহ একটি অতি জটিল উদাহরণ। আমাদের যখন প্রয়োজন কেবল তখনই এই উত্তরটি ডাব্লুটিএফের 5 - 6 লাইনের সাথে এই জিনিসটি হয় এবং হয়।
এখানে আমি COALESCE এ দেখছি ... এবং আশা করি এটি বোধগম্য হয় ...
সরল আকারে…।
কোলেসেস (ফিল্ডনাম, 'খালি')
সুতরাং এটি অনুবাদ করে… যদি "ফিল্ডনাম" নুল হয় তবে "EMPTY" শব্দটি সহ ক্ষেত্রের মানকে বিশিষ্ট করুন।
মাল্টিপল মানগুলির জন্য এখন ...
কোলেসেস (ফিল্ডনাম 1, ফিল্ডনাম 2, মান 2, মান 3)
ক্ষেত্রের নাম 1 এর মানটি যদি শূন্য হয় তবে ফিল্ডের নাম 2 এ মানটি পূরণ করুন, যদি FieldName2 NULL হয় তবে এটি মান 2 সহ পূরণ করুন etc.
অ্যাডভেঞ্চার ওয়ার্কস ২০১২ স্যাম্পল ডাটাবেসের জন্য পরীক্ষার কোডের এই অংশটি নিখুঁতভাবে কাজ করে এবং COALESCE কীভাবে কাজ করে তার একটি ভিজ্যুয়াল ব্যাখ্যা দেয় :
SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product
আইএসএনএলএল-র প্রতিস্থাপনের চেয়ে আরও অনেক কিছু মিল রয়েছে। আমি সম্পূর্ণরূপে সম্মত হই যে Coalesce এর অফিসিয়াল "ডকুমেন্টেশন" অস্পষ্ট এবং অসহায়। এই নিবন্ধটি অনেক সাহায্য করে। http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
এখানে কোলেসিস সহ একটি সাধারণ প্রশ্ন রয়েছে -
select * from person where coalesce(addressId, ContactId) is null.
এটি সেই ব্যক্তিকে ফিরিয়ে দেবে যেখানে ঠিকানা ঠিকানা এবং যোগাযোগের আইডি উভয়ই বাতিল are
coalesce ফাংশন
যেমন
কোলেসেস () ফাংশনের সর্বাধিক সংজ্ঞা হতে পারে:
কোলেসেস () ফাংশনটি সমস্ত পাস হওয়া আর্গুমেন্টের মূল্যায়ন করে তারপরে কোনও এনইউএলকে মূল্যায়ন না করে যুক্তির প্রথম উদাহরণটির মান প্রদান করে।
দ্রষ্টব্য: এটি সমস্ত পরামিতিগুলি মূল্যায়ন করে, অর্থাত্ প্রত্যাবর্তিত / নয় ন্যূন প্যারামিটারের ডানদিকে যুক্তির (গুলি) মূল্যায়ন এড়িয়ে যায় না।
বাক্য গঠন:
Coalesce(arg1, arg2, argN...)
সাবধানতা : নালকে যা মূল্যায়ন করে সেগুলি ছাড়াও অন্যান্য সমস্ত (নন-নুল) আর্গুমেন্টগুলি অবশ্যই একই ডেটাটাইপের হতে হবে বা মেলানো টাইপের হতে হবে (যা "সুস্পষ্টভাবে স্বয়ংক্রিয়ভাবে রূপান্তরিত হতে পারে" উপযুক্ত একটি ডেটাটাইপে রূপান্তরিত), উদাহরণগুলি দেখুন নিচে:
PRINT COALESCE(NULL, ('str-'+'1'), 'x') --returns 'str-1, works as all args (excluding NULLs) are of same VARCHAR type.
--PRINT COALESCE(NULL, 'text', '3', 3) --ERROR: passed args are NOT matching type / can't be implicitly converted.
PRINT COALESCE(NULL, 3, 7.0/2, 1.99) --returns 3.0, works fine as implicit conversion into FLOAT type takes place.
PRINT COALESCE(NULL, '1995-01-31', 'str') --returns '2018-11-16', works fine as implicit conversion into VARCHAR occurs.
DECLARE @dt DATE = getdate()
PRINT COALESCE(NULL, @dt, '1995-01-31') --returns today's date, works fine as implicit conversion into DATE type occurs.
--DATE comes before VARCHAR (works):
PRINT COALESCE(NULL, @dt, 'str') --returns '2018-11-16', works fine as implicit conversion of Date into VARCHAR occurs.
--VARCHAR comes before DATE (does NOT work):
PRINT COALESCE(NULL, 'str', @dt) --ERROR: passed args are NOT matching type, can't auto-cast 'str' into Date type.
আছে HTH
ISNULL
, এটি স্ট্যান্ডার্ড নয়, কম নমনীয়, আমি পড়েছি যে এটি সর্বদা প্রথম আর্গুমেন্টের ডেটাটাইপকে ফিরিয়ে দেবে এবং প্রত্যাবর্তিত মানটির মতো ডেটাটাইপকে নয়COALESCE
।