PDA

View Full Version : جستجوی نام بر اساس حروف الفبا



احمد سامعی
دوشنبه 14 فروردین 1391, 16:46 عصر
سلام
من یک جدول دارم برای مشتریان که اطلاعاتی مثل نام و تلفن و آدرس و... داره
برای جستجو مشتری گزینه هایی مثل نام و تلفن و ... گذاشتم،می خوام جستجو بر اساس اول حروف الفبا در نام مشتری هم داشته باشم. سرچ زدم چیزی پیدا نکردم
در فرم اصلی برنامه برای انتخاب حرف الفبا از رادیوباتن استفاده کردم. توی کوئری از like استفاده کردم
اما بعضی از حروف مثل الف شامل چندین نوع می شه
مثل آ و ا و أ و... خوب نمی شه واسه همه باتن گذاشت چون طبیعاً یک حرف حساب می شن

where چطوری بنویسم که مثلاً اگز پارامتر الف به صورت 'آاإأء' به کوئری پاس کردم همه به ازای همه این حروف سرچ بزنه ؟ مثلاً آیا می شه از in استفاده کردم


@name NVarChar(60) = null,
@alpha nvarchar(5) = 'x' --x: null


IF(@alpha = 'x') SET @name = '%' + RTRIM(@name) + '%';
ELSE SET @name = RTRIM(@alpha) + '%'

این هم بخش where که نوشتم برای نام:

AND (CommonTB.name LIKE COALESCE(@name, CommonTB.name))

ASKaffash
سه شنبه 15 فروردین 1391, 08:31 صبح
سلام
باید از شبیه سازی توسط تابع Replace استفاده کنید ابتدا یک UDF بنویسید که یک رشته را دریافت و حروف را تبدیل کند یعنی همه حروف مثلا "آ ا" ... به مثلا "ا" تبدیل شوند سپس مفایسه را انجام دهید برای مشکل انواع "ک" و "ی" نیز می توانید درون تابع همین کار را انجام دهید در ضمن در هنگام طراحی قبل از رشته های ثابت حرف N یادتان نرود

احمد سامعی
سه شنبه 15 فروردین 1391, 14:03 عصر
ممنون
ببخشید اما شما صورت مسئله را ظاهرا متوجه نشدین من می خوام یک رشته چند حرفی به sp بدم و حرف اول فیلد نام به ازای هر کدام از حروف رشته داده شده درست بود سلکت اجام بشه

مثلاً رشته = آاأإ به عنوان پارامتر بدیم
حالا اگر اول نام فرد آ بود یا أ یا ا یا إ سلکت انجام بشه

راه حل از msdn پیدا کردم باید به شکل زیر دستور تغییر داد برای درک بیشتر لینک در msdn درباره like (http://msdn.microsoft.com/en-us/library/ms179859.aspx)مطالعه فرمائید.


IF(@alpha = 'x') SET @name = '%' + RTRIM(@name) + '%'; ELSE SET @name = '[' + RTRIM(@alpha) + ']%'
where (CommonTB.name LIKE COALESCE(@name, CommonTB.name))