سبد (0)

تابع PATINDEX در SQL

تابع 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

نتیجه به شکل زیر خواهد بود:

result
64

اگر با حذف قسمت where ردیف ها را محدود نکنیم، کوئری بالا نتیجه را برای همه ردیف ها برمی گرداند و اگر مقادیر گزارش شده صفر نباشد یعنی مکان شروع الگو پیدا شده و اگر صفر باشد الگو پیدا نشده است.


مثال2: در مثال زیر، از wildcardها در الگو استفاده شده است: (علامت "_" جانشینی برای دقیقا یک کاراکتر است)

SELECT PATINDEX('%en_ure%',DocumentSummary) as result
  FROM Production.Document
  WHERE DocumentNode = 0x7B40;
GO

نتیجه به شکل زیر خواهد بود:

result
64

مثال3: در مثال زیر، از تابع COLLATE برای مشخص کردن Collation عبارتی که مورد جستجو قرار می گیرد استفاده کرده ایم:

SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) as result ;
GO

نتیجه به شکل زیر خواهد بود:

result
9

برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServer کلیک کنید.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه