راهنمای جامع SQL LIKE: تطبیق الگو و مثالهای عملی در SQL Server
عملگر SQL LIKE ابزاری قدرتمند در SQL است که برای جستجوی الگوهای مشخص در ستونهای متنی مورد استفاده قرار میگیرد. با بهکارگیری کاراکترهای وایلدکارد (wildcard)، این عملگر به شما امکان میدهد تا رشتههایی را بیابید که با الگوی تعیینشده مطابقت دارند، حتی اگر محتوای دقیق آنها را بهطور کامل ندانید. در این مقاله به بررسی دقیق و ارائه مثالهای کاربردی از عملگر LIKE در محیط SQL Server میپردازیم تا درک جامعی از قابلیتهای آن به دست آورید.
عملگر SQL LIKE چیست؟
عملگر SQL LIKE به شما این امکان را میدهد که مقادیر موجود در یک ستون را با یک الگوی متنی مشخص مقایسه کنید. این قابلیت بهویژه برای فیلتر کردن و بازیابی دادهها بر اساس شرایط پیچیدهتر از مقایسههای برابری ساده (مانند استفاده از عملگر =
) بسیار مفید است و در عملیات جستجو و گزارشگیری کاربرد فراوان دارد.
ساختار کلی برای استفاده از عملگر LIKE به صورت زیر است:
SELECT column1, column2 FROM table_name WHERE columnN LIKE pattern;
در این ساختار:
column1, column2
: ستونهایی هستند که قصد دارید مقادیر آنها را در نتیجه نمایش دهید.table_name
: نام جدولی است که دادههای مورد نظر شما در آن قرار دارند.columnN
: ستونی است که عملیات تطبیق الگو (pattern matching) روی آن انجام میشود.pattern
: الگویی است که برای جستجو استفاده میشود. این الگو میتواند شامل یک یا چند کاراکتر وایلدکارد باشد.
کاراکترهای وایلدکارد (Wildcard Characters) در SQL LIKE
کاراکترهای وایلدکارد عناصر کلیدی هستند که به شما کمک میکنند تا الگوهای جستجوی انعطافپذیر و قدرتمندی را با عملگر LIKE بسازید. در ادامه به معرفی و توضیح مهمترین آنها میپردازیم:
- % (علامت درصد): این کاراکتر میتواند جایگزین صفر یا چند کاراکتر از هر نوعی باشد. این پرکاربردترین وایلدکارد برای جستجوهای عمومی است.
مثال:'J%'
برای یافتن هر رشتهای که با حرف ‘J’ شروع میشود.'%O%'
برای یافتن هر رشتهای که حرف ‘O’ را در هر نقطهای از خود شامل میشود. - _ (علامت آندرلاین): این کاراکتر دقیقاً جایگزین یک کاراکتر از هر نوعی میشود. برای جستجوهایی که نیاز به تعداد مشخصی از کاراکترها در یک موقعیت خاص دارند، مفید است.
مثال:'_A%'
برای یافتن هر رشتهای که حرف دوم آن ‘A’ باشد. - [] (براکت): این کاراکتر برای مشخص کردن مجموعهای از کاراکترها یا یک بازه (range) از کاراکترها در یک موقعیت خاص استفاده میشود.
مثال:'[AJ]%'
برای یافتن هر رشتهای که با ‘A’ یا ‘J’ شروع میشود.'[A-E]%'
برای یافتن هر رشتهای که با یکی از حروف ‘A’ تا ‘E’ شروع میشود. - [^] (کرت در براکت): این کاراکتر، زمانی که در داخل براکت قرار میگیرد، به معنای “نباشد” یا “غیر از” است. این یک عملگر نفی برای کاراکترها است.
مثال:'[^AJ]%'
برای یافتن هر رشتهای که نه با ‘A’ و نه با ‘J’ شروع میشود.
آمادهسازی دادههای نمونه
برای نشان دادن کاربردهای مختلف عملگر SQL LIKE، ابتدا یک جدول ساده ایجاد کرده و تعدادی داده به آن اضافه میکنیم. این مثالها در SQL Server قابل اجرا هستند.
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY IDENTITY(1,1),
EmployeeName VARCHAR(50),
City VARCHAR(50)
);
INSERT INTO Employees (EmployeeName, City) VALUES
('John Doe', 'New York'),
('Jane Smith', 'London'),
('Peter Jones', 'Paris'),
('Anna Miller', 'New York'),
('Robert Brown', 'London'),
('Alicia Clark', 'Paris'),
('David Wilson', 'New York'),
('Sarah White', 'London'),
('Michael Green', 'Paris'),
('Jessica Taylor', 'New York'),
('Bryan Adams', 'London'),
('Catherine King', 'Paris');
استفاده از SQL LIKE با کاراکتر وایلدکارد درصد (%)
کاراکتر درصد (%
) یکی از انعطافپذیرترین وایلدکاردها است که میتواند جایگزین هیچ کاراکتر، یک کاراکتر یا چندین کاراکتر باشد. این کاراکتر برای جستجوهای گسترده و عمومی ایدهآل است.
مثال ۱: یافتن نامهایی که با ‘J’ شروع میشوند.
این کوئری تمام کارمندانی را انتخاب میکند که نام آنها با حرف ‘J’ شروع شده و پس از آن هر تعداد کاراکتر دلخواه میتواند وجود داشته باشد.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE 'J%';
مثال ۲: یافتن شهرهایی که حرف ‘O’ را در خود دارند.
این کوئری تمام شهرهایی را بازیابی میکند که در هر نقطهای از نام خود (ابتدایی، میانی یا انتهایی) شامل حرف ‘O’ باشند.
SELECT EmployeeName, City FROM Employees WHERE City LIKE '%O%';
مثال ۳: یافتن نامهایی که حاوی دنباله ‘AN’ هستند.
این مثال نام کارمندانی را پیدا میکند که دنباله ‘AN’ را در هر موقعیتی از نام خود (به عنوان بخشی از کلمه) دارند.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '%AN%';
مثال ۴: یافتن نامهایی که با ‘J’ شروع و به ‘N’ ختم میشوند.
این کوئری نام کارمندانی را انتخاب میکند که با حرف ‘J’ آغاز شده و با حرف ‘N’ به پایان میرسند، و بین این دو حرف میتواند هر تعداد کاراکتر (صفر یا بیشتر) وجود داشته باشد.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE 'J%N';
استفاده از SQL LIKE با کاراکتر وایلدکارد آندرلاین (_)
کاراکتر آندرلاین (_
) برای مطابقت با دقیقاً یک کاراکتر در یک موقعیت خاص استفاده میشود. این کاراکتر زمانی مفید است که شما نیاز به تعیین دقیق تعداد کاراکترها در یک بخش از الگو دارید.
مثال ۱: یافتن نامهایی که حرف دوم آنها ‘A’ است.
این کوئری کارمندانی را پیدا میکند که نامشان با هر کاراکتری شروع شده و دقیقاً حرف دوم آن ‘A’ باشد، سپس هر تعداد کاراکتر دیگر.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '_A%';
مثال ۲: یافتن نامهایی که حرف سوم آنها ‘N’ است.
این مثال نامهایی را بازیابی میکند که صرفنظر از دو حرف اول، حرف سوم آنها ‘N’ باشد و پس از آن نیز هر تعداد کاراکتر دیگر میتواند بیاید.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '__N%';
مثال ۳: یافتن نامهایی که با ‘J’ شروع شده، حرف دوم آنها هر چیزی باشد و سپس ‘N’ بیاید.
این کوئری نامهایی را انتخاب میکند که با ‘J’ شروع میشوند، کاراکتر دوم آنها میتواند هر کاراکتری باشد (یک کاراکتر) و سپس کاراکتر ‘N’ قرار گرفته باشد.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE 'J_N%';
استفاده از SQL LIKE با کاراکتر وایلدکارد براکت ([])
کاراکترهای براکت ([]
) به شما این امکان را میدهند که مجموعهای از کاراکترها یا یک بازه از کاراکترها را برای یک موقعیت واحد در الگو تعریف کنید. این ویژگی برای تطبیق با یک کاراکتر خاص از بین چندین گزینه مشخص، یا با هر کاراکتری در یک بازه خاص، کاربرد دارد.
مثال ۱: یافتن نامهایی که با ‘A’ یا ‘J’ شروع میشوند.
این کوئری نام کارمندانی را بازیابی میکند که اولین حرف نام آنها ‘A’ یا ‘J’ باشد.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '[AJ]%';
مثال ۲: یافتن نامهایی که با حروف ‘A’ تا ‘E’ شروع میشوند.
این مثال نامهایی را پیدا میکند که اولین حرف آنها در بازه ‘A’ تا ‘E’ (شامل A و E) قرار دارد.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '[A-E]%';
مثال ۳: یافتن نامهایی که اولین حرف آنها ‘A’ تا ‘E’ یا آندرلاین باشد.
این کوئری کارمندانی را انتخاب میکند که نامشان با یک حرف از ‘A’ تا ‘E’ یا با کاراکتر آندرلاین (_
) شروع میشود. (توجه داشته باشید که در برخی تنظیمات COLLATE
در SQL Server، کاراکتر _
داخل براکت ممکن است به عنوان یک وایلدکارد تفسیر نشود و نیاز به escape خاصی داشته باشد، اما در حالت عادی، به معنای کاراکتر آندرلاین واقعی است.)
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '[_A-E]%';
استفاده از SQL LIKE با کاراکتر وایلدکارد کرت ([^])
کاراکتر کرت (^
) زمانی که در داخل براکتها ([^]
) قرار میگیرد، یک عملگر نفی است. این به شما امکان میدهد کاراکترهایی را مشخص کنید که *نباید* در آن موقعیت از الگو وجود داشته باشند.
مثال ۱: یافتن نامهایی که با ‘A’ یا ‘J’ شروع نمیشوند.
این کوئری تمام کارمندانی را انتخاب میکند که نام آنها نه با ‘A’ و نه با ‘J’ شروع میشود.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '[^AJ]%';
مثال ۲: یافتن نامهایی که با حروف ‘A’ تا ‘E’ شروع نمیشوند.
این مثال نامهایی را بازیابی میکند که اولین حرف آنها در بازه ‘A’ تا ‘E’ قرار *ندارد*.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE '[^A-E]%';
استفاده از عبارت SQL NOT LIKE
عملگر NOT LIKE
عملکردی معکوس نسبت به LIKE
دارد. این عبارت برای یافتن رشتههایی استفاده میشود که با الگوی مشخص شده مطابقت *ندارند*. این به شما امکان میدهد نتایج ناخواسته را فیلتر کنید.
مثال: یافتن نامهایی که با ‘J’ شروع نمیشوند.
این کوئری تمام کارمندانی را انتخاب میکند که نام آنها با حرف ‘J’ شروع نمیشود، یعنی نامشان با هر کاراکتر دیگری غیر از ‘J’ آغاز میشود.
SELECT EmployeeName, City FROM Employees WHERE EmployeeName NOT LIKE 'J%';
استفاده از SQL LIKE با بند ESCAPE
گاهی اوقات نیاز است که کاراکترهای وایلدکارد (مانند %
، _
، [
، ]
) را به عنوان کاراکترهای عادی (Literal Characters) در جستجو استفاده کنید، نه به عنوان وایلدکارد. در این موارد، از بند ESCAPE
استفاده میشود که یک کاراکتر escape را تعریف میکند. این کاراکتر به SQL Server میگوید که کاراکتر بعدی را به صورت معمولی تفسیر کند.
مثال: یافتن نامهایی که شامل یک آندرلاین (_
) هستند.
فرض کنید میخواهید نامی را جستجو کنید که کاراکتر آندرلاین را در خود دارد، مانند ‘John_Doe’. در این حالت، باید آندرلاین را escape کنید تا به عنوان یک وایلدکارد تفسیر نشود. در مثال زیر، ما به دنبال نامهایی میگردیم که با ‘B’ شروع شده و سپس یک کاراکتر آندرلاین واقعی در جایی از نام آنها وجود دارد (مثلاً ‘Bob_Smith’).
SELECT EmployeeName, City FROM Employees WHERE EmployeeName LIKE 'B%_%' ESCAPE '\';
در این کوئری، '\'
به عنوان کاراکتر escape تعریف شده است. B%
به معنای رشتهای است که با ‘B’ شروع شده و پس از آن هر تعداد کاراکتر میآید. سپس \_
به معنای یک کاراکتر آندرلاین واقعی است که با کاراکتر escape (\
) از تفسیر شدن به عنوان وایلدکارد جلوگیری شده، و %
آخر به معنای هر تعداد کاراکتر باقیمانده است. (با توجه به دادههای نمونه فعلی ما، نتیجهای برای این کوئری بازگردانده نخواهد شد زیرا نامی با این الگو نداریم، اما ساختار کوئری صحیح است.)
استفاده از SQL LIKE با کاراکترهای وایلدکارد به ترتیب خاص
میتوانید کاراکترهای وایلدکارد را به گونهای ترکیب کنید که الگوهای جستجوی بسیار خاصی را ایجاد کنید که ترتیب مشخصی از کاراکترها را در یک رشته دنبال میکنند. این روش برای یافتن توالیهای خاص در متن بسیار کاربردی است.
مثال: یافتن نامهایی که شامل ‘J’ هستند، سپس ‘E’ (در هر نقطهای پس از J) و در نهایت به ‘N’ ختم میشوند.
این کوئری تمام کارمندانی را انتخاب میکند که نام آنها ابتدا شامل حرف ‘J’ باشد، سپس در هر نقطهای پس از ‘J’ شامل حرف ‘E’ باشد، و در نهایت کل نام باید با حرف ‘N’ به پایان برسد. (با توجه به دادههای نمونه فعلی ما، هیچ نامی با این الگو مطابقت ندارد، اما این مثال نحوه ساخت چنین الگویی را نشان میدهد.)
SELECT EmployeeName FROM Employees WHERE EmployeeName LIKE '%J%E%N';