📚 فصل ۱۹ — الگوها و جستجو با LIKE در SQL Server

""

1️⃣ مقدمه — چرا به LIKE نیاز داریم؟

در برنامه‌های واقعی، اغلب لازم داریم داده‌ها را بر اساس الگوها جستجو کنیم، نه یک تطابق کامل.
برای مثال:

  • پیدا کردن همه مشتریانی که نامشان با “حمید” شروع می‌شود.
  • یافتن همه محصولاتی که توضیح آن‌ها کلمه “کتاب” را دارد.
  • جستجو برای ایمیل‌هایی که با @gmail.com ختم می‌شوند.

اینجاست که عملگر LIKE وارد می‌شود.


2️⃣ ساختار پایه LIKE

SELECT ستون‌ها
FROM جدول
WHERE ستون LIKE الگو;

مثال ساده:

SELECT *
FROM Customers
WHERE FullName LIKE N'علی%';

📌 همه نام‌هایی که با “علی” شروع می‌شوند.


3️⃣ کاراکترهای ویژه (Wildcards) در LIKE

عملگر LIKE از الگوها استفاده می‌کند که شامل کاراکترهای ویژه زیر هستند:

کاراکترمعنیمثال
%صفر یا چند کاراکتر%رضا% → وجود کلمه “رضا” در هر جا
_دقیقاً یک کاراکترعلی_ → “علی” + یک حرف
[abc]هر یک از کاراکترها[abc]تینا → اتینا، بتینا، ستینا
[a-z]بازه کاراکترها[A-C]% → شروع با A یا B یا C
[^abc]هر کاراکتری به جز این‌ها[^م]حمد → نام‌هایی که با م شروع نمی‌شوند

4️⃣ مثال‌های پایه با %

شروع با متن خاص

SELECT *
FROM Customers
WHERE FullName LIKE N'محمد%';

📌 هر اسمی که با “محمد” شروع می‌شود.

پایان با متن خاص

SELECT *
FROM Customers
WHERE Email LIKE '%@gmail.com';

شامل متن خاص

SELECT *
FROM Products
WHERE Description LIKE N'%کتاب%';

5️⃣ مثال‌های پایه با _

دقیقاً یک کاراکتر در جای مورد نظر

SELECT *
FROM Customers
WHERE FullName LIKE N'علی_';

📌 “علیا”، “علیب”، “علیک” ولی نه “علی” یا “علی‌رضا”.


6️⃣ استفاده از [ ] برای محدوده کاراکتر

مثال — حروف اول بین الف و د

SELECT *
FROM Students
WHERE FirstName LIKE N'[ا-د]%';

7️⃣ استفاده از [^ ] برای استثناء

مثال — اولین حرف به جز الف

SELECT *
FROM Students
WHERE FirstName LIKE N'[^ا]%';

8️⃣ حساسیت به حروف بزرگ/کوچک

به صورت پیش‌فرض، در SQL Server حساسیت به حروف بستگی به Collation دارد.
برای حساس بودن:

SELECT *
FROM Users
WHERE Username LIKE 'Admin' COLLATE SQL_Latin1_General_CP_CS_AS;

9️⃣ ترکیب LIKE با AND و OR

SELECT *
FROM Products
WHERE (Name LIKE N'%کتاب%' OR Name LIKE N'%دفتر%')
  AND Price > 50000;

🔟 مثال‌های پیشرفته

یافتن شماره‌تلفن‌های با پیش‌شماره خاص

SELECT *
FROM Customers
WHERE Phone LIKE '0912%';

ایمیل‌هایی که با حرف الف شروع و gmail دارند

SELECT *
FROM Customers
WHERE Email LIKE N'ا%@gmail.com';

تمام کدهای پستی که رقم سوم‌شان ۵ است

SELECT *
FROM Addresses
WHERE PostalCode LIKE '__5%';

1️⃣1️⃣ استفاده از ESCAPE برای کاراکترهای خاص

اگر بخواهید % یا _ را به عنوان متن معمولی جستجو کنید، باید از ESCAPE استفاده کنید.

مثال:

SELECT *
FROM Notes
WHERE Content LIKE '%!%%' ESCAPE '!';

📌 جستجوی متن شامل % واقعی.


1️⃣2️⃣ کارایی و بهینه‌سازی LIKE

  • اگر الگو با % شروع شود (%متن)، معمولاً ایندکس‌ها بی‌اثر می‌شوند.
  • بهتر است دنبال الگوهایی باشید که ابتدای آن ثابت باشد (متن%).

1️⃣3️⃣ سناریوهای واقعی پروژه‌ای

سناریو 1 — جستجوی مشتریان بر اساس بخش نام

کاربر یک کلمه وارد می‌کند و می‌خواهیم همه نتایج مشابه را برگردانیم:

DECLARE @Search NVARCHAR(50) = N'رضا';
SELECT *
FROM Customers
WHERE FullName LIKE '%' + @Search + '%';

سناریو 2 — محصولات با کد خاص

SELECT *
FROM Products
WHERE ProductCode LIKE 'PRD[0-9][0-9][0-9]';

سناریو 3 — پیدا کردن کاربران تستی

SELECT *
FROM Users
WHERE Username LIKE N'%test%' OR Email LIKE N'%test%';

1️⃣4️⃣ اشتباهات رایج

  1. استفاده از LIKE به جای جستجوی دقیق (=) وقتی نیازی نیست.
  2. گذاشتن % در ابتدای الگو که باعث حذف استفاده از ایندکس می‌شود.
  3. فراموش کردن کاراکتر N قبل از رشته‌های یونیکد فارسی.

1️⃣5️⃣ تمرین‌های عملی

  1. نمایش همه مشتریانی که نامشان با “س” شروع می‌شود.
  2. همه محصولاتی که توضیحشان شامل کلمه “پلاستیک” است.
  3. همه ایمیل‌هایی که دامنه‌ی @yahoo.com دارند.
  4. شماره‌حساب‌هایی که رقم آخرشان ۵ است.
  5. کاربرانی که نام‌شان شامل “علی” ولی نه “علی‌رضا” باشد.

1️⃣6️⃣ جمع‌بندی

در این فصل یاد گرفتید:

  • ساختار LIKE و کاراکترهای %, _, [ ], [^ ]
  • ترکیب LIKE با شرط‌های دیگر
  • استفاده از ESCAPE برای جستجوی کاراکترهای خاص
  • نکات بهینه‌سازی و اشتباهات رایج
  • تمرین‌ها و سناریوهای واقعی
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *