نحوه ایجاد یک تابع CLR در SQL – تبدیل تاریخ میلادی به شمسی

اگر با دیتابیس کار می کنید حتما به گزارش هایی برخوردید که لازم باشه از تاریخ شمسی استفاده کنید.  همونطور که می دونید توابع شمسی در دیتابیس ها (دیتابیس مد نظرمون در این مقاله MS SQL!) وجود ندارند البته با روش های مختلف می شود این تبدیل رو انجام داد هر چند که در ادامه مختصری درباره هر کدام ازاین روش ها توضیح خواهم داد ولی هدف این مقاله آموزش پیاده سازی یک User-Defined Function برای تبدیل تاریخ میلادی به شمسی و استفاده آن در SQL می باشد.

روش های دیگر کار با تاریخ شمسی

  • برای تبدیل تاریخ میلادی به شمسی می تونید از تابع FORMAT استفاده کنید که با پر کردن آرگومان culture با مقدار ‘fa-ir’ این تبدیل به سادگی هر چه تمام صورت می گیرد. به طور مثال:
  • روش دیگر تبدیل و کار با تاریخ شمسی، استفاده از جدول DimDate است که بسیار پر کاربرد در حوزه هوش تجاری می باشد و انعطاف زیادی برای اعمال تغییرات دارد. کار با این روشساده است و تنها کافیه جدول رو با جدول های دیگر ارتباط دهید. همچنین می تونید از قابلیت های Time intelligence هم در این روش استفاده کنید البته با کمی کدنویسی و تنظیمات!

و اما نحوه نوشتن یک تابع سفارشی در MS-SQL

برای این کار لازمه Visual Studio رو نصب داشته باشید. نوشتن تابع با استفاده از زبان #C صورت می گیرد و برای تبدیل تاریخ میلادی به شمسی از System.Globalization و کلاس PersianCalendar که از پیش توسط مایکروسافت تهیه شده استفاده می کنیم (کار رو ساده کرد!).

برای شروع، یک پروژه جدید Sql Server در محیط Visual Studio درست می کنیم. برای این کار از مسیر  File > New > Project پروژه SQL Server را جستجو کنید.

و پس از تعیین نام و مسیر ذخیره، پروژه را ایجاد کنید.

با راست کلیک بر روی پروژه، یک item جدید با عنوان User-Defined Function اضافه کنید.

و در نهایت آیتم زیر را به پروژه اضافه کنید. و دقت کنید نام JalaliFunction رو برای این فایل انتخاب کردم بعدا با این نام کار داریم.

با باز شدن فایل به غیر از کتابخانه ها کد زیر را خواهید دید.

کدر زیر رو در داخل بلاک function و جایگزین return new SqlString (string.Empty) کنید.

همچنین داخل function مقدار پارامتر  DateTime dt رو قرار دهید و در نهایت خواهید داشت:

پس از راست کلیک بر روی solution و انتخاب build کار با محیط Visual Studio تمام خواهد شد.

قبل از ایجاد تابع ساخته شده در SQL لازمه برخی تنظیمات انجام بشه که با اجرا کد زیر ( البته با داشتن دسترسی لازم) تغییرات اعمال خواهد شد. همچنین دقت کنید یک بار انجام کد اجرا بشه کافیه و نیازی نیست کد زیر رو برای پروژه های دیگه دوباره اجرا کنید.

برای ایجاد ارتباط sql با تابع نیاز است فایل آدرس dll ایجاد شده پس از build پروژه رو در مسیر کد زیر قرار بدید و اجرا کنید.

و بالاخره قدم آخر که ایجاد یه تابع در SQL است. در کد زیر نام همون اسمی که برای  فایل استفاده کردید رو جایگزین کنید و اگر می خواهید در دیتابیس خاصی ایجاد بشه اون رو در جلوی USE قرار دهید.

حالا نوبت تست تابع هستش!…
 

مشابه این تابع و همچنین توابع بیشتر رو می تونید از این repository هم ببینید و ایده بگیرید. تابع اول و آخر ماه شمسی رو هم تست کنید.

۱ دیدگاه. ترک جدید

عالی هست.ممنون‌

پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست