تابع PATINDEX:
این تابع، اولین مکان رخداد یک الگو(%pattern%) در یک عبارت خاص(expression) را برمی گرداند.
اگر الگو پیدا نشد مقدار صفر را برمی گرداند.
نحوه استفاده:
PATINDEX ( '%pattern%' , expression)
پارامترها:
پارامتر |
توضیح |
pattern |
رشته ای از کاراکترهایی است که الگوی جستجو را مشخص می کند. کاراکترهای Wildcard را می توان در pattern استفاده نمود البته کاراکتر "%" باید در ابتدا و انتهای Pattern آورده شود(بجز زمانی که بخواهید در ابتدا یا انتهای expression بگردید)
|
expression |
عبارتی است که pattern داخل آن مورد جستجو قرار می گیرد.
|
نوع داده خروجی(Return Type):
اگر عبارت دوم یکی از انواع زیر باشد، داده خروجی از نوع bigint خواهد بود و در غیر اینصورت int
varchar(max) , nvarchar(max)
تذکر:
1- اگر هر کدام از پارامترهای pattern یا expressionخالی باشد، در این صورت PATINDEX مقدار NULL را برخواهد گرداند البته اگر سطح compatibility پایگاه داده روی 70 تنظیم شده باشد. اگر این مقدار روی 65 یا پایین تر تنظیم شده باشد، در صورتی که هر دو پارامتر NULL باشد CHARINDEX مقدار NULL برمی گرداند.
2- تابع PATINDEX مقایسه ها را براساس Collation ورودی انجام می دهد. برای انجام یک مقایسه براساس یک Collation تعریف شده می توانید از تابع COLLATE استفاده کنید.
3-wildcardها می توانند هنگام جستجوی داده در یک پایگاه داده مورد استفاده قرار گیرند. Wildcardهای زیر را می توانید در الگو بکار بیرید:
Wildcard |
توضیحات |
% |
جانشینی برای صفر یا چند کاراکتر |
_ |
جانشینی برای دقیقا یک کاراکتر |
[charlist] |
کاراکترهای نوشته شده در براکت جستجو می شوند |
[^charlist] |
به غیر از کاراکترهای نوشته شده در براکت
|
مثال1: مثال زیر، مکان شروع الگوی "%ensure%" در ستون DocumentSummary از جدول Document را پیدا می کند:
SELECT PATINDEX('%ensure%',DocumentSummary) as result
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
نتیجه به شکل زیر خواهد بود:
اگر با حذف قسمت where ردیف ها را محدود نکنیم، کوئری بالا نتیجه را برای همه ردیف ها برمی گرداند و اگر مقادیر گزارش شده صفر نباشد یعنی مکان شروع الگو پیدا شده و اگر صفر باشد الگو پیدا نشده است.
مثال2:در مثال زیر، از wildcardها در الگو استفاده شده است: (علامت "_" جانشینی برای دقیقا یک کاراکتر است)
SELECT PATINDEX('%en_ure%',DocumentSummary) as result
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
نتیجه به شکل زیر خواهد بود:
مثال3: در مثال زیر، از تابع COLLATE برای مشخص کردن Collation عبارتی که مورد جستجو قرار می گیرد استفاده کرده ایم:
SELECT PATINDEX ( '%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN) as result ;
GO
نتیجه به شکل زیر خواهد بود:
برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServer کلیک کنید.
READ MORE