একটি স্ট্রিং পদ্ধতি ব্যবহার করে স্ট্রিংয়ের এসকিউএল সার্ভার 2005-এ একটি স্ট্রিং রয়েছে কিনা তা পরীক্ষা করুন


245

আমি একটি স্ট্রিং @mainString = 'CATCH ME IF YOU CAN',। আমি শব্দটি MEভিতরে আছে কিনা তা পরীক্ষা করতে চাই @mainString

এসকিউএল-তে কোনও স্ট্রিংয়ের একটি নির্দিষ্ট সাবস্ট্রিং রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করব?

উত্তর:


395

CHARINDEX () বৃহত্তর স্ট্রিংয়ের মধ্যে একটি স্ট্রিং অনুসন্ধান করে এবং ম্যাচের সন্ধান দেয়, বা কোনও মিল না পাওয়া গেলে 0

if CHARINDEX('ME',@mainString) > 0
begin
    --do something
end

ড্যানিয়েলসের উত্তরগুলি সম্পাদনা করুন বা থেকে, আপনি যদি কোনও শব্দ (এবং শব্দের উপ-উপাদান নয়) সন্ধান করতে চান তবে আপনার চরিনডেক্স কলটি দেখতে এমন হবে:

CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')

(আরও পুনরাবৃত্তির প্রস্তাব যুক্ত করুন () ঘটতে পারে এমন যে কোনও বিরামচিহ্নের জন্য কল


2
ঠিক আছে আমি প্যাটিনডেক্স ব্যবহার করেছি। ধন্যবাদ!
এনএলভি

1
s / recursive / nected / - "recursive" হবে যদি REPLACEনিজেকে বলা হয়; "নেস্টেড" হ'ল যখন কোনও ফাংশন কলের ফলাফল অবিলম্বে অন্য কোনও ফাংশনে প্রেরণ করা হয়।
মনিকার লসুইট

2
এসকিউএল-তে 'এমই' কেস সংবেদনশীল হবে নাকি 'আমি' এবং 'আমাকে' এর জন্য যদি আপনার বিবৃতিও করতে হয়?
a.powell

5
@ a.powell - জোট জড়িত এর উপর নির্ভর করে। আপনার যদি এটির এক উপায় বা অন্য প্রয়োজন হয় তবে আপনি এই পরীক্ষার মধ্যে সর্বদা জোর করতে পারেন। যেমন তুলনা select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')এবং select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home')। (সমষ্টিগুলিতে, CSকেস সেনসিটিভ হিসাবে বোঝায় এবং আমি নিশ্চিত যে আপনি কাজ করতে পারেন CI)।
ড্যামিয়েন_এ_বিশ্বাসীরা

2
@ ভিন্সপানুসিও - টি-এসকিউএল এর স্ট্রিং প্রসেসিং কুখ্যাতভাবে দুর্বল। এসকিউএল এর শক্তি সেট ভিত্তিক অপারেশন হয়। এই ক্ষেত্রে (স্ট্রিং প্রসেসিং করতে ইচ্ছুক, এবং এমন কোনও কিছু যেখানে একটি রেইজেক্স একটি সুস্পষ্ট সমাধান হতে পারে), এটি কাজের ক্ষেত্রে ভুল সরঞ্জামটি বাছাই করা তাদের ক্ষেত্রে আরও বেশি ঘটনা।
দামিয়েন_সে_ অবিশ্বাস্য

120

আপনি প্রিডিকেটে কেবল ওয়াইল্ডকার্ড ব্যবহার করতে পারেন (যদি, যেখানে বা অন্যদিকে):

@mainstring LIKE '%' + @substring + '%'

বা এই নির্দিষ্ট ক্ষেত্রে

' ' + @mainstring + ' ' LIKE '% ME[., ]%'

(আপনি যদি পুরো শব্দটি সন্ধান করছেন তবে উদ্ধৃত স্ট্রিংগুলিতে ফাঁকা স্থান রাখুন, বা যদি আমাকে আরও বড় শব্দের অংশ হতে পারে তবে এগুলি ছেড়ে দিন)।


3
যদি আপনি শব্দের মিলগুলি (আপনার দ্বিতীয় উদাহরণ) সন্ধান করছেন, আপনার ক) একটি দরকার হবে @ মেইনস্ট্রিংয়ের আগে এবং পরে একটি স্থান যুক্ত করুন (যাতে আপনি প্রথম বা শেষ শব্দের সাথে মিল রাখতে পারেন), এবং খ) বিরামচিহ্নগুলি সরিয়ে ফেলুন
ড্যামিয়েন_সে_বিশ্বাসীরা

2
এটি আমার জন্য CHARINDEX () এর চেয়ে ভাল কারণ আমার বিশেষ ক্ষেত্রে, সীমাবদ্ধ অনুমতি থাকার কারণে আমি CHARINDEX () ফাংশনটি সম্পাদন করতে পারি না।
জেমস টি স্নেল

1
( Nআপনার কলামটি যদি একটি হয় তবে আপনার সমস্ত স্ট্রিং ধ্রুবকগুলির উপসর্গটি কেবল ভুলে যাবেন না nvarchar, অন্যথায় আপনি প্রতি সারি রূপান্তর পান)
রিচার্ড জাজাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.