فصل 15 از 24 درس 1 از 1

توابع و 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
NULLIFNULL در برابری
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 سه معیار ثابت برای ارزیابی نمونه‌ها هستند.