আপনি যদি কেবলমাত্র ইউএস ইংলিশ বর্ণমালার 26 টি অক্ষর (উচ্চতর ক্ষেত্রে এবং লোয়ার-কেস সংস্করণ উভয়ই) ব্যবহার করার গ্যারান্টিযুক্ত হন তবে নিশ্চিত হন যে আপনি ব্যবহার করে LIKE
এবং / অথবা PATINDEX
সরল পরিসরের স্বরলিপি দিয়ে [a-z]
(আপনি না কেস-সংবেদনশীল কোলেশন ব্যবহার করার সময় একটি উচ্চ-केस "জেড" ব্যবহার করা দরকার) to
কিন্তু, যদি আপনি স্বীকারোক্তি-মার্কিন মধ্যে পাওয়া অক্ষর পেতে পারে জন্য বিভিন্ন কোড পেজ / Collations এখনো উপলব্ধ বর্ণমালা VARCHAR
তথ্য (উদাঃ Þ
= ল্যাটিন বড় হাতের "কণ্টকময়" = SELECT CHAR(0xDE)
), তারপর আপনি অক্ষর শ্রেণিতে যারা অন্তর্ভুক্ত করতে হবে পারে: [a-z0-9, Þ]
। অবশ্যই, এই অতিরিক্ত অক্ষরগুলি কী হবে তা প্রতি কোড পৃষ্ঠা ভিত্তিতে।
এছাড়াও, দয়া করে সচেতন হন যে উভয় কোলেশন প্রকার (এসকিউএল সার্ভার বনাম উইন্ডোজ) এবং সংবেদনশীলতা সেটিংস (কেস, অ্যাকসেন্ট, ইত্যাদি সংবেদনশীল বনাম সংবেদনশীল) কোনও অক্ষরে কোন অক্ষরের অন্তর্ভুক্ত রয়েছে তা প্রভাবিত করবে। উদাহরণস্বরূপ, এসকিউএল সার্ভার কলেশনগুলি উইন্ডোজ কোলিশেশন হিসাবে বিপরীত ক্রমে উচ্চ-কেস এবং লোয়ার-কেস অক্ষরগুলিকে সাজান। অর্থ, উভয় ধরণের কোলিশের ক্ষেত্রে কেস-সেনসিটিভ কোলেশন ধরে নেওয়া, একজন করবে AaBb...
এবং অন্যটি করবে aAbB...
। প্রভাবটি সেগুলির a
মধ্যে A-Z
একটির সীমার মধ্যে থাকবে তবে অন্যটির নয়। এবং এর পরিসীমা a-Z
বাইনারি কোলেশনের কোনও অক্ষরের সাথে মেলে না (একটিতে শেষ হয় _BIN
বা _BIN2
, কিন্তু ব্যবহার করবেন না _BIN
) প্রদত্ত মানটি A
65 এবংa
97, সুতরাং এটি 65 ;-) এর মাধ্যমে 97 এর একটি অবৈধ পরিসীমা। এখানে উদাহরণ দেওয়ার জন্য অনেক বিচিত্রতা রয়েছে তাই আমি খুব শীঘ্রই আমার ব্লগে একটি বিস্তারিত ব্যাখ্যা পোস্ট করার চেষ্টা করব (এবং তারপরে এটির লিঙ্কটি আপডেট করব)। তবে, আপনি যদি কেবল মার্কিন ইংরেজী অক্ষর গ্রহণের বিষয়ে কঠোর হতে চলেছেন (এমনকি অন্য ভাষা থেকে বৈধ অক্ষর পেতেও পারে) তবে আপনার সর্বোত্তম বিকল্পটি সম্ভবত নিম্নলিখিত প্যাটার্ন এবং কোলেশন ব্যবহার করা হবে :
LIKE '%[^A-Za-z0-9, ]%' COLLATE Latin1_General_100_BIN2
এখন, আপনি যদি NVARCHAR
ডেটা সমর্থন করছেন এবং বিভিন্ন ভাষা থেকে "শব্দ" অক্ষর পেতে পারেন, তবে টি-এসকিউএল খুব বেশি সহায়ক হবে না কারণ এই জিনিসগুলির মধ্যে পার্থক্য করার কোনও সত্যিকারের উপায় নেই। এই ক্ষেত্রে, আপনার একটি নিয়মিত এক্সপ্রেশন (RegEx) ব্যবহার করা উচিত - বিশেষত Replace
পদ্ধতি / ফাংশন - এবং সেগুলি কেবল এসকিউএলসিআরআর এর মাধ্যমে উপলব্ধ। নিম্নলিখিতটিতে বেশ কয়েকটি "বিশেষ" অক্ষর প্রতিস্থাপনের একটি উদাহরণ দেখানো হয়েছে, যা বৈধ অক্ষরের সাথে অন্তত একটি ভাষায় রেখে দেয়:
DECLARE @Test NVARCHAR(500);
SET @Test = N'this$is%a<>TEST,;to}⌡↕strip╞╟╚══¶out_ç_ƒ▀ special-ij-೫-chars-舛-დ-א-B';
SELECT SQL#.RegEx_Replace4k(@Test, N'[\W\p{Pc}-[,]]', N' ', -1, 1, NULL);
রিটার্নস:
this is a TEST, to strip out ç ƒ special ij ೫ chars 舛 დ א B
রেজিএক্স এক্সপ্রেশনটির অর্থ:
\W
= একটি Regex "এস্কেপ" যার অর্থ "কোনো অ -word চরিত্র"
\p{Pc}
= "বিরামচিহ্ন, সংযোগকারী" এর একটি ইউনিকোড "বিভাগ" (এটি কেবল ম্যাচের জন্য প্রয়োজন কারণ এই "বিভাগ "টি বিশেষত \W
পালানোর দ্বারা বাদ দেওয়া হয়েছে )
-[,]
= বর্গ বিয়োগ (এগুলি \W
পালানোর ক্ষেত্রে অন্তর্ভুক্ত হওয়ায় কমাগুলি "বিশেষ" হিসাবে মিলিয়ে বাদ দেওয়ার জন্য এটি প্রয়োজন )
আপনি কেবল জারি করে কোনও টেবিলের আপডেট করতে পারেন:
UPDATE tbl
SET tbl.field = SQL#.RegEx_Replace4k(tbl.field, N'[\W\p{Pc}-[,]]', N' ', -1, 1, NULL)
FROM tbl
WHERE SQL#.RegEx_IsMatch4k(tbl.field, N'[\W\p{Pc}-[,]]', 1, NULL) = 1;
দয়া করে মনে রাখবেন যে এই উদাহরণগুলির জন্য, আমি এসকিউএলসিআরআর ফাংশনগুলির ফ্রি সংস্করণ এসকিউএল # লাইব্রেরিতে উপলব্ধ দুটি ফাংশন ব্যবহার করেছি , যা আমি তৈরি করেছি (তবে আবার এগুলি নিখরচায়)। এছাড়াও নোট করুন যে আমি "4k" সংস্করণগুলি ব্যবহার করেছি NVARCHAR(4000)
যা NVARCHAR(MAX)
প্যারামিটার ধরণের পরিবর্তে ব্যবহারের কারণে দ্রুত হয় । যদি আপনার ডেটা ব্যবহার করা হয় NVARCHAR(MAX)
, তবে কেবলমাত্র ফাংশনটির নামগুলি থেকে "4k" সরান।
দয়া করে দেখুন: