توابع و Expressionهای کاربردی
توابع و Expressionهای کاربردی
بخشی از آموزش جامع SQL Server
محتوای درس توابع و Expressionهای کاربردی
T-SQL | String، Date، Conversion و NULL Functions
Functionهای Built-in برای پردازش String، Date، Number، Conversion و NULL استفاده میشوند. انتخاب Function باید علاوه بر نتیجه، اثر آن روی Data Type و SARGability را در نظر بگیرد.
متن این فصل با رویکرد مرجع فنی و قابل استفاده در پروژه واقعی تنظیم شده است؛ مثالها در امتداد مدل StoreDb نوشته شدهاند و اصطلاحات اصلی SQL Server و T-SQL بهصورت یکدست بهکار میروند.
1. مفاهیم و قراردادهای اصلی
Functionهای Built-in برای پردازش String، Date، Number، Conversion و NULL استفاده میشوند. انتخاب Function باید علاوه بر نتیجه، اثر آن روی Data Type و SARGability را در نظر بگیرد.
در طراحی پایگاه داده، Syntax تنها بخشی از مسئله است. نوع داده، Constraint، الگوی دسترسی، Transaction و هزینه اجرای Query باید همزمان با نیاز Domain در نظر گرفته شوند.
| مفهوم | کارکرد |
|---|---|
| CONCAT | ترکیب رشته |
| STRING_AGG | تجمیع متن |
| COALESCE | اولین مقدار غیر NULL |
| NULLIF | NULL در برابری |
| TRY_CONVERT | تبدیل امنتر |
| DATEADD | محاسبه تاریخ |
2. ساختار و Syntax پایه
Functionهای Scalar در Projection مفیدند، اما استفاده از Function روی Column داخل Predicate میتواند استفاده از Index را محدود کند. Conversionهای ضمنی نیز باید کنترل شوند.
SELECT
CONCAT(FirstName, N' ', LastName) AS FullName,
COALESCE(Email, Mobile, N'بدون تماس') AS Contact
FROM dbo.Customers;3. سناریوی StoreDb
برای Range ماه، شروع ماه با DATEFROMPARTS و پایان با DATEADD ساخته میشود و شرط روی خود OrderDate بدون Function نوشته میشود.
نمونههای این فصل بر مدل فروشگاهی StoreDb بنا شدهاند تا ارتباط مفاهیم میان فصلها حفظ شود و Queryها در یک Context یکپارچه قابل بررسی باشند.
DECLARE @StartDate date = DATEFROMPARTS(2026, 8, 1);
DECLARE @EndDate date = DATEADD(month, 1, @StartDate);
SELECT Id, OrderDate, TotalAmount
FROM dbo.Orders
WHERE OrderDate >= @StartDate
AND OrderDate < @EndDate;4. اصول طراحی و Performance
طراحی پایدار باید هم صحت داده و هم هزینه اجرای عملیات را پوشش دهد. انتخاب سادهتر زمانی ترجیح دارد که Contract داده را روشنتر و رفتار Optimizer را قابل پیشبینیتر نگه دارد.
- TRY_CAST/TRY_CONVERT برای ورودی غیرقابل اعتماد قابل بررسی است.
- COALESCE و ISNULL از نظر Type Behavior متفاوتاند.
- Function در WHERE با Index Design بررسی شود.
- UTC/Local Time سیاست مشخص داشته باشد.
5. خطاهای رایج و نکات ایمنی
دستورهای SQL میتوانند مستقیماً داده و ساختار را تغییر دهند؛ بنابراین بازبینی Context، تعداد Rowهای هدف و اثر Transaction قبل از اجرای تغییرات اهمیت عملی دارد.
- YEAR(Column) برای Date Range پرتکرار.
- Conversion ضمنی String به int در Predicate.
- LEN و DATALENGTH بدون توجه به تفاوت کاراکتر/بایت.
- STRING_AGG بدون Order موردنیاز.
6. چکلیست نهایی فصل
- Functionهای String و Date مناسب انتخاب میشوند.
- NULL با COALESCE/NULLIF مدیریت میشود.
- Conversion نامعتبر مسیر کنترلشده دارد.
- Predicateهای مهم SARGable باقی میمانند.
7. جمعبندی
خروجی این فصل باید به تصمیمی قابل اتکا در طراحی یا Query منجر شود؛ صحت داده، قابلیت نگهداری و رفتار Performance سه معیار ثابت برای ارزیابی نمونهها هستند.