দুটি শীর্ষ ভোট দেওয়া উত্তর নিয়ে সমস্যা রয়েছে। প্রস্তাবিত উত্তরটি DATALENGTHপ্রোগ্রামার ত্রুটিগুলির প্রবণ। ফলাফলগুলি DATALENGTHঅবশ্যই 2 দ্বারা ভাগ করতে হবে NVARCHARতবে VARCHARপ্রকারের জন্য নয় । এর জন্য আপনি যে ধরণের দৈর্ঘ্য পাচ্ছেন তার জ্ঞান প্রয়োজন এবং যদি এই ধরণের পরিবর্তন হয় তবে আপনার ব্যবহৃত স্থানগুলি যত্ন সহকারে পরিবর্তন করতে হবে DATALENGTH।
সর্বাধিক উত্সাহিত উত্তরের সাথেও একটি সমস্যা রয়েছে (যা আমি স্বীকার করি যে এই সমস্যাটি আমাকে বিট না করা পর্যন্ত এটি করা আমার পছন্দসই উপায় ছিল)। আপনি যে জিনিসটির দৈর্ঘ্য পাচ্ছেন সেটি যদি টাইপের হয় NVARCHAR(4000)এবং এটিতে আসলে 4000 টি অক্ষরের একটি স্ট্রিং থাকে, তবে এসকিউএল সংক্ষিপ্তভাবে ফলাফলটি ছড়িয়ে দেওয়ার পরিবর্তে সংযুক্তিযুক্ত চরিত্রটিকে উপেক্ষা করবে NVARCHAR(MAX)। শেষ ফলাফলটি একটি ভুল দৈর্ঘ্য। একই জিনিসটি ভ্রচার (8000) এর সাথে ঘটবে।
আমি যা কাজ পেয়েছি, প্রায় পুরানো সমান হিসাবে দ্রুত LEN, LEN(@s + 'x') - 1বড় স্ট্রিংয়ের চেয়ে দ্রুত এবং এটি অন্তর্নিহিত অক্ষরের প্রস্থটি নিম্নলিখিত বলে ধরে নিচ্ছে না:
DATALENGTH(@s) / DATALENGTH(LEFT(LEFT(@s, 1) + 'x', 1))
এটি ডেটালেথেনথ পায় এবং তারপরে স্ট্রিং থেকে একটি একক অক্ষরের ডেটালেথ দিয়ে ভাগ করে। 'এক্স' এর সংযোজনে স্ট্রিং ফাঁকা থাকা কেসটিকে কভার করে (যা সেই ক্ষেত্রে শূন্য দ্বারা একটি বিভাজন দেয়)। এই কিনা কাজ করে @sহয় VARCHARবা NVARCHAR। LEFTস্ট্রিং বড় হয়ে গেলে কিছু সময়ের জন্য শেভ হওয়ার আগে 1 টি অক্ষরের কাজটি করা । যদিও এর সাথে সমস্যাটি হ'ল এটি সরোগেট জোড় যুক্ত স্ট্রিংগুলির সাথে সঠিকভাবে কাজ করে না।
স্বীকৃত উত্তরের মন্তব্যে আরও একটি উপায় উল্লেখ করা হয়েছে, যা ব্যবহার করে REPLACE(@s,' ','x')। এই কৌশলটি সঠিক উত্তর দেয়, তবে স্ট্রিং বড় হওয়ার সাথে সাথে অন্য কৌশলগুলির চেয়ে ধীরে ধীরে মাত্রার কয়েকটি আদেশ হয়।
যে কোনও প্রযুক্তি ব্যবহার করে সার্োগেট জোড় দ্বারা প্রবর্তিত সমস্যাগুলি দেওয়া DATALENGTH, আমি মনে করি যে সবচেয়ে নিরাপদ পদ্ধতি যা সঠিক উত্তর দেয় যা আমি জানি তা নিম্নলিখিত:
LEN(CONVERT(NVARCHAR(MAX), @s) + 'x') - 1
এটি REPLACEকৌশলটির চেয়ে দ্রুত এবং লম্বা স্ট্রিং সহ আরও দ্রুত। মূলত এই কৌশলটি LEN(@s + 'x') - 1কৌশলটি, তবে প্রান্তের ক্ষেত্রে সুরক্ষার সাথে যেখানে স্ট্রিংটির দৈর্ঘ্য 4000 (এনভারচারের জন্য) বা 8000 (বারচারের জন্য) থাকে, যাতে সঠিক উত্তরটি এমনকি তার জন্য দেওয়া হয়। এটি সরোগেট জোড়গুলি সহ সঠিকভাবে স্ট্রিংগুলি পরিচালনা করতে হবে।