مشخصات مقاله
-
2076
-
0.0
-
14800
-
0
-
0
آموزش عملگر BETWEEN در Sql
مباحث دیگر در خصوص عطف و فصل منطقی: عملگر BETWEEN
اگر یک مجموعه مقادیر در اختیار دارید و می خواهید بدانید مقدار مورد نظر در آن محدود قرار دارد یا خیر، می بایست از BETWEEN استفاده نمایید. عملگر BETWEEN در sql برای انتخاب و واکشی داده هایی که در يک محدوده معین و بين دو مقدار تعيين شده بکار می رود (به عبارتی صریح تر، BETWEEN یک عملگر است که برای گزینش مقادیری که بین یک محدوده ی خاص قرار می گیرد به کار می رود).
آموزش کاربردی
1. SQL Server را اجرا کرده و در پنجره ی محاوره ی اتصال به سرور بر روی دکمه ی Connect کلیک نمایید.
2. در پنجره ی Object Explorer، گره Databases را باز کنید.
3. در این پنجره باید پایگاه داده ای به نام Department Store1 وجود داشته باشد. بر روی علامت + در سمت چپ آن کلیک نموده و آن را باز کنید.
4. بر رویDepartment Store1 راست کلیک کرده و گزینه ی New Query را انتخاب کنید.
5. حال گره Tables را در پنجره ی Object Explorer را باز کنید.
6. بر روی Inventory.StoreItems راست کلیک کرده و گزینه ی Edit Top 200 Rows را انتخاب کنید.
7. در نوارابزار Query Designer، دکمه ی های
،
،
را به ترتیب کلیک نمایید.
8. در کادر SQL، دستور را به صورت زیر ویرایش کنید:
SELECT ItemNumber AS [Item #],
Manufacturer,
Category,
SubCategory AS [Sub-Category],
ItemName AS [Name/Description],
UnitPrice AS [Unit Price],
DiscountRate AS [%Discount]
FROM Inventory.StoreItems
9. در منوی اصلی: Query Designer -> Execute SQL.
استفاده از عملگر BETWEEN در شرط
برای ایجاد یک عبارت شرطی BETWEEN به صورت ویژوال، در پنجره ی Criteria، بر روی کادر Filter مربوط به ستون که شرط برای آن اعمال می شود کلیک کرده و عبارت مورد نظر را در آن وارد کنید. ساختار نگارشی این دستور به صورت زیر می باشد:
BETWEEN Start AND End
برای ایجاد دستور با کدنویسی، عملگر BETWEEN را در شرط WHERE و همراه با عملگر عطف منطقی AND بکار می بریم. فرمول استفاده از BETWEENدر SQL به شرح زیر می باشد:
WHERE Expression BETWEEN Start AND End
در جایگاه Expression اسم ستون قرار می گیرد. Start مقدار آغازین است که محدوده از آن شروع می شود و End مقداری است که محدوده در آن پایان می یابد. پس از ارزیابی و اجرای شرط، لیستی از مقادیر موجود بین بازه ی Start و End استخراج شده و به نمایش گذاشته می شود.
رکوردهای زیر را درنظر بگیرید:
USE Exercise;
GO
CREATE TABLE Administration.Students
(
StudentNumber int,
FirstName nvarchar(20),
LastName nvarchar(20),
StudentName AS CONCAT(LastName, N', ', FirstName),
Grade nvarchar(4)
);
GO
INSERT INTO Records.Students(StudentNumber, FirstName, LastName, Grade)
VALUES(960504, N'Paul', N'Yamo', N'D'), (583115, N'Bertrand', N'Nguyen', N'B'),
(284225, N'Alex', N'Alphey', N'D'), (429470, N'Lindsay', N'Womack', N'A'),
(840051, N'Pamela', N'Nyat', N'B'), (928357, N'Ashley', N'Mann', N'F'),
(275064, N'Jeanne', N'Ulm', N'A'), (724857, N'Chrstine', N'Jeffers', N'C'),
(929740, N'Richard', N'Fields', N'A'), (860402, N'Lois', N'Gibb', N'B');
GO
مقادیر ذکر شده در عبارت BETWEEN باید از نظر نوع یکسان باشند به طوری که مفسر SQL بتواند محدوده ی مشخص شده بین دو مقدار را تشخیص داده و شناسایی کند:
1. اگر مقداری که در جایگاه Expression وارد می شود (از نوع char یا nchar باشد، مفسر SQL ابتدا مقادیر ستون را به صورت داخلی مرتب سازی می کند، سپس مقادیر موجود بین محدوده ی تعیین شده از کاراکترهای حروف الفبا را بازیابی می کند
مثال:
SELECT * FROM Administration.Students WHERE Grade BETWEEN N'a' AND N'c';
2. اگر مقداری که در جایگاه Expression قرار می گیرد از نوع رشته باشد (varchar یا nvarchar)، مفسر SQL ابتدا ستون ها را به صورت داخلی مرتب می کند، سپس مقادیر را به ترتیب حروف الفبا و بر اساس محدوده ی مشخص شده در شرط بازیابی می کند.
مثال:
SELECT StudentNumber [Student #],
FirstName [First Name],
Lastname [Last Name],
Grade
FROM Administration.Students
WHERE LastName BETWEEN N'Jeffers' AND N'Nyat';
GO

چنانچه مقداری که در جایگاه Expression قرار می گیرد مقدار عددی باشد (از نوع داده ای int، real و مشتقات آن ها)، مفسر SQL بازه ی عددی مقدار را از آغاز تا پایان درنظر می گیرد. سپس هر مقدار از آن ستون که بین محدوده ی مشخص شده قرار می گیرد را واکشی می کند
مثال:
SELECT StudentNumber [Student #],
FirstName [First Name],
Lastname [Last Name],
Grade,
CASE Grade
WHEN N'A' THEN N'Pass'
WHEN N'B' THEN N'Pass'
WHEN N'C' THEN N'Pass'
WHEN N'D' THEN N'Pass'
WHEN N'F' THEN N'Fail'
END [Pass/Fail Status]
FROM Administration.Students
WHERE StudentNumber BETWEEN 20000 AND 500000;
GO

در صورتی که مقدار ستون از نوع date/time باشد، عملگر BETWEEN مقادیر را از تاریخ/زمان شروع تا تاریخ/زمان پایان درنظر گرفته و از ستون ذکر شده در دستور استخراج می کند.
آموزش کاربردی: استفاده از عملگر BETWEEN
1. برای مشاهده ی 10 رکورد اول، به پنجره ی Properties مراجعه کرده و سپس فیلد Top Specificiation را باز نمایید. با دوبار کلیک بر روی فیلد (Top) مقدار آن را به Yes تغییر دهید. حال اطمینان حاصل نمایید فیلد Expression مقدار 10 را نشان می دهد.
2. برای اجرای دستور و مشاهده ی نتیجه، در نوارابزار Query Designer، بر روی دکمه ی
کلیک نمایید.

3. در کادر SQL، تابع TOP (10) را از دستور حذف کنید.
4. تب مجاور (SQLQuery1.sql) را انتخاب نموده و سپس دستورات زیر را در آن وارد نمایید:
USE LambdaSquare1;
GO
SELECT "Unit #" = aparts.UnitNumber,
Beds = aparts.Bedrooms,
Baths = aparts.Bathrooms,
[Monthly Rent] = aparts.Price,
"Primary Deposit" = aparts.Deposit,
(aparts.Price + aparts.Deposit) "Due Before Moving",
CASE aparts.Available
WHEN 0 THEN N'No or Not Yet'
WHEN 1 THEN N'Yes'
END "Available"
FROM Presentation.Units aparts
WHERE aparts.Price BETWEEN 1000 AND 1200
ORDER BY [Monthly Rent], "Primary Deposit";
GO
5. برای اجرای کد، کلید F5 را فشار دهید.

نقیض کردن عبارت شرطی BETWEEN
برای واکشی اطلاعات خارج از محدوده ی مشخص شده، از يک عملگر نقیض NOT پیش از دستور Between ... And استفاده می شود. بنابراین به منظور نقیض کردن عبارت BETWEEN، بایستی عملگر NOT را قبل از آن در دستور تایپ کرد.
مثال:
SELECT * FROM Administration.Students WHERE not Grade BETWEEN N'a' AND N'c';
نتیجه ی زیر را برمی گرداند:

برای افزایش خوانایی دستور، می توان آن (بخش دستور پس از عملگر نقیض) را داخل کاراکتر پرانتز درج کرد.
مثال:
SELECT * FROM Students WHERE NOT (Grade BETWEEN N'a' AND N'c');
بجای استفاده از کد فوق می توان برای دستیابی به نتیجه ی یکسان، دستور را بدین صورت تنظیم کرد: BETWEEN N'd' AND N'z'.
عبارت های شرطی BETWEEN ترکیبی
همان طور که قبلا گفته شد، عملگر BETWEEN در زبان sql برای گزینش داده ها در يک محدوده یا بازه ی مشخص، در بين دو مقدار تعریف شده بکار می رود. مقادير مورد استفاده در این دستور شرطی می تواند از نوع عددی، رشته ای يا تاريخ/زمان باشد .
می توان دو یا چند عبارت BETWEEN را با یکدیگر پیوند زده و چندین محدوده ی مقدار را در دستور خود برای استخراج مقادیر دلخواه از ستون تعریف کرد. در زیر مثالی را مشاهده می کنید که عبارت شرطی BETWEEN دو محدوده ی مقدار را به وسیله ی فصل منطقی OR با هم ترکیب کرده است:
BETWEEN Start1 AND End1 OR Start2 AND End2
برای افزایش خوانایی دستور، توصیه می شود هر دو عبارت را داخل پرانتز مجزا قرار دهید:
BETWEEN (Start1 AND End1) OR (Start2 AND End2)
هر عبارت به صورت جداگانه ارزیابی می شود. مفسر ابتدا محدوده ی تعیین شده در عبارت اول را ارزیابی می کند، سپس به عبارت دوم می پردازد.در نهایت رکوردهای حاصل از هر عبارت با یکدیگر ترکیب می شود.
مثال:
SELECT * FROM Students
WHERE (StudentNumber BETWEEN 100000 AND 300000)
OR
(StudentNumber BETWEEN 600000 AND 800000);
نتیجه ی زیر را برمی گرداند:

در دستور بالا، محدوده ی مقدار از یک ستون را درنظر داشته باشید. می توان یک عبارت شرطی ترکیبی BETWEEN تنظیم کرد که محدوده ی مقدار از یک ستون را با محدوده ی مقدار از ستون دیگر توسط عملگر عطف منطقی AND به هم متصل می کند.
مثال:
SELECT * FROM Students
WHERE (StudentNumber BETWEEN 400000 AND 400000)
OR
(Grade BETWEEN 'A' AND N'B');
خروجی:

استفاده از عملگر BETWEEN همراه با IN
فرض کنید فیلدی در دست دارید که مقادیر معینی از آن تکراری هستند.
مثال:
USE Exercise;
GO
DROP TABLE Employees;
GO
CREATE TABLE Employees([Empl #] nchar(10), [First Name] nvarchar(20),
[Last Name] nvarchar(20), Salary money, [Full Time?] bit);
GO
INSERT INTO Employees
VALUES(N'29730', N'Philippe', N'Addy', 20.05, 1);
GO
INSERT INTO Employees([Empl #], [First Name], [Last Name], Salary)
VALUES(N'28084', N'Joan', N'Shepherd', 12.72);
GO
INSERT INTO Employees([Empl #], [First Name], [Last Name], Salary)
VALUES(N'79272', N'Joshua', N'Anderson', 18.26);
GO
INSERT INTO Employees
VALUES(N'22803', N'Gregory', N'Swanson', 15.95, 0);
GO
INSERT INTO Employees([Empl #], [Last Name], Salary, [Full Time?])
VALUES(N'28084', N'Shepherd', 12.72, 1),
(N'39742', N'Anders', 8.88, 0);
GO
INSERT INTO Employees
VALUES(N'83084', N'Josephine', N'Anderson', 20.02, 1);
GO
INSERT INTO Employees([Empl #], [First Name], [Last Name], Salary)
VALUES(N'79272', N'James', N'Anders', 18.26),
(N'27924', N'Gregory', N'Hope', 12.85),
(N'39742', N'John', N'Anderson', 8.88);
GO
SELECT * FROM Employees;
GO
پس از اجرای این کد، نتیجه ی زیر حاصل می گردد:

همان طور که مشاهده می کنید، برخی از اسم ها همچون Sheperd، Anders و Anderson تکراری هستند. از پیش با نحوه ی جستجو و یافتن رکوردهایی که در مقدار معینی مشترک هستند آشنا هستیم. مثال زیر لیستی از کارکنان که اسم فامیلی آن ها Anderson است را بدست می دهد:
SELECT [Empl #], [First Name], [Last Name], Salary, CASE [Full Time?] WHEN 1 THEN N'Yes' WHEN 0 THEN N'No' ELSE N'Unknown' END "Is Full Time?" FROM Employees WHERE [Last Name] = N'Anderson'; GO
نتیجه:

اکنون می خواهیم مقدار دیگری را به جستجو یا پرس و جوی خود اضافه کنیم. این کار را با فصل منطقی OR انجام می دهیم.
مثال:
SELECT [Empl #], [First Name], [Last Name], Salary, CASE [Full Time?] WHEN 1 THEN N'Yes' WHEN 0 THEN N'No' ELSE N'Unknown' END "Is Full Time?" FROM Employees WHERE ([Last Name] = N'Anderson') OR ([Last Name] = N'Shepherd');
خروجی:

به همین نحوه، می توان تعداد بی شماری عبارت OR به دستور مورد نظر اضافه کرد. قبلا با نحوه ی ایجاد فصل منطقی برای بازیابی مقدار یک یا چند ستون بر اساس از عبارت های شرطی آشنا شدیم. در زیر نمونه ای را مشاهده می کنید که مقدار دو ستون را بررسی می کند و در صورت منطبق بودن مقدار هر یک از دو عبارت شرطی با مقادیر ستون های مشخص شده، آن ها را استخراج می کند:
SELECT [Empl #], [First Name], [Last Name], Salary, CASE [Full Time?] WHEN 1 THEN N'Yes' WHEN 0 THEN N'No' ELSE N'Unknown' END "Is Full Time?" FROM Employees WHERE ([Last Name] = N'Anderson') OR ([Full Time?] IS NOT NULL);
نتیجه ی زیر را برمی گرداند:

اگر فصل منطقی که تنظیم کرده اید تنها یک ستون را شامل می شود، SQL عملگر IN را به عنوان جایگزین ارائه می دهد.
تنظیم عبارت شرطی با عملگر IN
عملگر IN عملکردی مشابه OR که به یک ستون اعمال شده، دارد. اما هر یک به شیوه ی متفاوتی تنظیم می شود. عملگر IN عملا برای بازیابی داده هایی از رکوردهای جدول بکار می رود که مقدار دقیق حداقل یکی از فیلدهای آن ها را در دست داریم.
عبارت شرطی مورد نظر را به صورت ویژوال یا با کدنویسی ایجاد می کنیم. فرمول تنظیم این دستور به شرح زیر می باشد:
IN(Expression1, Expression2, Expression_n)
در ابتدا کلیدواژه ی IN را درج نموده و بلافاصله پس از آن کاراکتر پرانتز را اضافه می کنیم. داخل پرانتز لیست مقادیر را وارد کرده و آن ها را توسط ویرگول از یکدیگر جدا می کنیم.
به منظور تنظیم دستور شرطی به همراه عملگر IN به صورت ویزاردی، ابتدا یک جدول را در Query Designer باز می کنید. در کادر Filter متعلق به ستون مورد نظر کلیک کرده و سپس عبارت شرطی دلخواه را داخل آن وارد نمایید.
در زبان SQL، عملگر IN همیشه با دستور WHERE همراه خواهد بود. نحوه ی کلی نگارش آن به صورت زیر می باشد:
WHERE ColumnName IN(Expression1, Expression2, Expression_n)
دستور را با واژه ی کلیدی WHERE آغاز کرده و به دنبال آن اسم ستون حاوی مقدار مورد جستجو را ذکر نمایید. داخل پرانتز عملگر IN، لیست مقادیر مورد جستجو را درج نموده و سپس آن ها را به وسیله ی تفکیک گر ویرگول از هم جدا کنید. تنها یکی از مقادیر ذکر شده در پرانتز به ستون مشخص شده در دستور متعلق می باشد. این دستور معادل Expression1 OR Expression2 OR Expression_n می باشد.
آموزش کاربردی
1. در پنجره ی Criteria، بر روی کادر Filter متعلق به فیلد Manufacturer کلیک نمایید.
2. جهت واکشی آیتم های مربوط به Coach یا Giorgio Armani، عبارت شرطی IN(Coach, Giorgio Armani) را وارد کنید.
3. برای مشاهده ی نتیجه، داخل پنجره راست کلیک کرده و گزینه ی Execute SQL را انتخاب کنید.

نقیض IN
راه های مختلفی برای نقیض کردن عملگر IN وجود دارد. مثال زیر را در نظر داشته باشید:
SELECT [Empl #], [First Name], [Last Name], Salary, CASE [Full Time?] WHEN 1 THEN N'Yes' WHEN 0 THEN N'No' ELSE N'Unknown' END "Is Full Time?" FROM Employees WHERE [Last Name] IN (N'Anderson', N'Shepherd');

آسان ترین روش برای نقیض کردن، جای گذاری عملگر NOT پیش از آن می باشد. یک راه این است که NOT را قبل از اسم ستون درج کرد.
مثال:
SELECT [Empl #], [First Name], [Last Name], Salary, CASE [Full Time?] WHEN 1 THEN N'Yes' WHEN 0 THEN N'No' ELSE N'Unknown' END "Is Full Time?" FROM Employees WHERE NOT [Last Name] IN (N'Anderson', N'Shepherd');

روش دیگر این است که عملگر نقیض را قبل از IN در دستور جای گذاری کرد:
SELECT * FROM Employees WHERE [Last Name] NOT IN (N'Anderson', N'Shepherd');
اگر تعداد مقادیر موجود در ستون محدود باشد، برای نقیض کردن آن می توان، بجای مقادیر دلخواه، مقادیری را که نمی خواهید در خروجی به نمایش درآید را داخل پرانتز تایپ کنید.
قید شرطی Check Constraint
گاهی به هنگام اجرای عملیات درج داده، حتی پس از مشخص کردن نوع داده ای که باید از طرف کاربر در ستون مد نظر وارد شود، لازم است مجموعه مقادیری که اجازه ی درج در آن ستون دارد را محدود کنیم. به همین صورت، می توانید قاعده یا قیدی را تعریف کنید که باید در خصوص ترکیبی از ستون ها، پیش از ایجاد رکورد، رعایت گردد. به عنوان مثال، می توانید به موتور DB اعلان کنید که باید بررسی انجام داده و از وارد شدن مقدار در حداقل یکی از ستون ها اطمینان حاصل نماید. برای مثال، در یک جدولی که حاوی اطلاعاتی و داده هایی درباره ی مشتری ها می باشد، می توانید از موتور DB درخواست کنید بررسی کند آیا شماره ی تلفن یا آدرس ایمیل مشتری (برای هر رکورد) وارد شده است یا خیر.
قابلیت بررسی اینکه آیا قید یا محدودیتی که برای جدول تعریف کرده اید رعایت شده است یا خیر، در SQL تحت عنوان CHECK CONSTRAINT شناخته می شود.
به طور کلی Constraint ها (یا قیود و یا محدودیت ها) در sql، برای محدود کردن (اعمال محدودیت بر) نوع داده هایی که می تواند در جدول تعریف شود، بکار می رود. از محدودیت Check در sql زمانی استفاده می کنیم که لازم است برای یک فیلد، یک سری محدودیت خاص مشخص کنیم.
CHECK CONSTRAINT در واقع یک عمل بولی است که توسط مفسر SQL انجام می گیرد. مفسر مقداری که برای ستون ارائه شده است را بررسی می کند، اگر مقدار مجاز بود:
1. CONSTRAINT یا قید اعمال شده مقدار TRUE را برمی گرداند.
2. مقدار پذیرفته شده و ..
3. در نهایت به ستون مورد نظر تخصیص می یابد.
در صورتی که مقدار ارائه شده مجاز نباشد:
1. CONSTRAINT مقدار FALSE را برمی گرداند.
2. مقدار ورودی پذیرفته نمی شود و ..
3. مقدار به ستون مد نظر اختصاص نمی یابد (در آن درج نمی گردد).
Check constraint را در زمان ایجاد جدول تعریف و اعمال می کنیم.
ایجاد یک check constraint به صورت ویزاردی
به منظور ایجاد یک check constraint، در زمان ایجاد جدول، داخل جدول راست کلیک کرده و گزینه ی Check Constraints... را انتخاب نمایید. در پی کلیک بر روی این گزینه کادر محاوره ای Check Constraints پدیدار می شود. ابتدا در کادر ذکر شده بر روی دکمه ی Add کلیک نمایید. از آنجایی که constraint یک شی محسوب می شود، لازم است برای آن یک اسم درنظر بگیرید. مهم ترین اطلاعاتی که شی یاد شده در خود ذخیره می کند، مکانیزمی است که توسط آن مقدار فیلدی که قید بر روی اعمال شده است را بررسی می کند. این مکانیزم در قالب یک عبارت تعریف می شود. بنابراین، به منظور ایجاد یک constraint، می بایست در کادر محاوره ای، بر روی فیلد Expression و دکمه ی حاوی نقطه چین کلیک نمایید. با کلیک بر روی دکمه ی ذکر شده، پنجره ی محاوره ی Check Constraint Expression به نمایش در می آید.
جهت ایجاد عبارت قید، ابتدا اسم ستون مورد نظر که محدودیت بر روی آن اعمال می شود و سپس کاراکتر پرانتز را درج کنید. داخل پرانتز، عملگرهای ریاضی و/یا SQL که در مباحث پیشین آموختیم را استفاده نمایید. در زیر مثالی را مشاهده می کنید که اطمینان حاصل می کند مقدار جدیدی که برای ستون Student Number مشخص شده است، حتما بزرگتر از 1000 است:

پس از ایجاد عبارت، کافی است دکمه ی OK را کلیک نمایید. چنانچه عبارت نامعتبر یا غیرمجاز باشد، شما با خطا مواجه شده و بایستی آن را تصحیح نمایید.
می توان هر تعداد قید و محدودیت که لازم می دانید برای جدول تعریف نمود:

تعریف و اعمال قید با کدنویسی
برای ایجاد یک constraint به صورت کد نویسی، ابتدا باید ستونی که محدودیت بر روی آن اعمال می شود را (داخل دستور CREATE TABLE) خلق کنید. پیش از بستن پرانتز تعریف جدول، فرمول زیر را بکار ببرید:
CONSTRAINT name CHECK (expression)
کلیدواژه های CONSTRAINT و CHECK برای تعریف قید الزامی می باشند. همان طور که قبلا گفته شد، CONSTRAINT یک شی تلقی شده و از این رو باید یک اسم به آن اختصاص داد شود. برای این منظور داخل پرانتزی که بلافاصله بعد از عملگر CHECK جای می گیرد، عبارتی که به عنوان محدودیت اعمال می شود را وارد کنید. در زیر مثالی را مشاهده می کنید که در آن برای ستونی با نام hourly salary (میزان دستمزد ساعتی برای یک کارکن)، قید > 12.50 تعریف شده است (حقوق آن باید بیشتر از مقدار تعیین شده در قید باشد):
CREATE TABLE Employees ( [Employee Number] nchar(7), [Full Name] varchar(80), [Hourly Salary] smallmoney, CONSTRAINT CK_HourlySalary CHECK ([Hourly Salary] > 12.50) );
یادآور می شویم که قید یا constraint برای محدود کردن داده های ورودی استفاده می شود.
لازم است به یاد داشته باشید که check constraint نه یک عبارت است و نه یک تابع، بلکه دربردارنده ی یک عبارت بوده و ممکن است تابع بخشی از تعریف آن باشد.
پس از ایجاد constraint های مورد نیاز برای جدول، به پنجره ی Object Explorer در محیط Microsoft SQL Server مراجعه کرده و داخل گره Table، بر روی علامت + نود Constraints کلیک کنید و سپس اسم قید اعمال شده را مشاهده نمایید.
پس از تعریف قید به صورت ویزاردی یا کدنویسی، در زمان درج داده، اگر کاربر (یا کد خود توسعه دهنده) مقداری غیرمجاز را وارد کند، با خطا مواجه خوهد شد. بجای عبارتی که فقط عملگرهای معمولی را شامل می شود، می توانید تابعی را بکار ببرید که در فرآیند بررسی مقدار ورودی فیلد به شما کمک کند. برای این منظور می توانید تابع خود را تعریف کرده و بکار ببرید یا یکی از توابع درون ساخته ی T-SQL را مورد استفاده قرار دهید.
توابع و انتخاب اطلاعات برای واکشی: توابع درون ساخته و استخراج داده ها
جهت اصلاح و فیلتر تحلیل داده ها، می توانید توابع خود و یا توابع درون ساخته ی T-SQL را بکار ببرید. همان طور که قبلا تشریح شد، توصیه می شود تا حد امکان از توابع توکار و درون ساخته ی خود T-SQL استفاده کنید.
به منظور استفاده از توابع درون ساخته ی خود SQL، در جایگاهی که اسم ستون را در آن ذکر می کنید، اسم تابع و به دنبال آن پرانتز را تایپ کنید. اگر تابع مورد نظر دارای پارامتر ورودی می باشد، در آن صورت باید قوانین و اصول فراخوانی تابع را رعایت نمایید. می توانید تابع را در هریک از عملگرهایی که تاکنون با آن ها آشنا شدید، بگنجانید. همچنین می توانید تابع درون ساخته را در یک عبارت بکار ببرید.
توابع کاربر (user-defined) و گزینش و استخراج داده ها
اگر هیچ یک از توابع درون ساخته ی T-SQL پاسخگوی نیازهای شما نیست، می توانید توابع خود را تعریف کرده و در زمان تحلیل و واکشی اطلاعات بکار ببرید. در گام نخست باید تابع را تعریف کرد. مثالی از دو تابع که در پایگاه داده ای به نما ROSH ایجاد شده را مشاهده می کنید:
USE ROSH;
GO
/* =============================================
Author: FunctionX
Create date: Friday 6 April, 2007
Description: This function is used
to get the full name of a student
============================================= */
CREATE FUNCTION Registration.GetFullName
(
@FName nvarchar(20),
@LName nvarchar(20)
)
RETURNS varchar(41)
AS
BEGIN
RETURN @LName + ', N' + @FName;
END;
GO
/* =============================================
Author: FunctionX
Create date: Saturday 7 April, 2007
Description: This function is used
to display Yes or No
============================================= */
CREATE FUNCTION Registration.ShowYesOrNo
(
@SingleParentHomeStatus bit
)
RETURNS nvarchar(3)
AS
BEGIN
DECLARE @Result nvarchar(3);
IF @SingleParentHomeStatus = 0
SET @Result = N'No';
ELSE
SET @Result = N'Yes';
RETURN @Result;
END;
GO
زمانی که تابع آماده می باشد، در جایگاه دستور SQL، اسم schema، عملگر نقطه، اسم تابع، پرانتز باز، پارامترهای ورودی و در پایان پرانتز بسته را درج نمایید.
مثال:
SELECT StudentNumber [Student #],
Registration.GetFullName(FirstName, LastName) AS [Student's Name],
Gender,
Registration.ShowYesOrNo(SingleParentHome) AS [Live's in a Single Parent Home?],
ParentsNames AS [Parents' Names]
FROM Registration.Students;
GO
نتیجه ی زیر را بدست می دهد:
