مرسی. خیلی ممنون
اگه بخواهیم ببینیم که آیا یک کارمند در یک ماه خاص مثلا 1391/05 چند روز ش رو حضوری در جدول حضور ثبت نکرده چه باید کرد.
مرسی. خیلی ممنون
اگه بخواهیم ببینیم که آیا یک کارمند در یک ماه خاص مثلا 1391/05 چند روز ش رو حضوری در جدول حضور ثبت نکرده چه باید کرد.
سلام
همانطور که گفتم این مورد میتواند حالت های مختلف داشته باشد ...
==============
روش اول:
بهترین حالت آن است که جدول ویژه ای برای کارکرد ماهیانه افراد (طبیعتاً با یک کلید یکتا) داشته باشید.
یعنی یک سطر برای هر فرد در ماه.
این جدول یتواند ضمن بایگانی اطلاعات کامل فیش حقوقی فرد در آن ماه، معیار مشخصی برای جدول یک به چند دیگری باشد که به حضور و مرخصی و غیبت اشاره میکند.
همانطورکه اشاره شد جدول دیگری میتواند شامل رابطه یک به چند فوق باشد که موارد رخ داده به راحتی قابل ردگیری در ماه مربوطه هستند.
و...
==============
روش دوم:
فقط از یک جدول برای ثبت این وقایع استفاده کنید و فیلد تاریخ تان از نوع استاندارد datetime باشد.
طبیعتاً در این حالت نیاز به تبدیل تاریخ درون خود SQLServer دارید.
با اجرای فایل sql زیر درون دیتابیس تان، توابع کامل هجری شمسی به SQLServer افزوده خواهد شد.
Pr_AddMonths
Pr_GetDayOfYear
Pr_GetDayOfMonth
Pr_GetMonth
Pr_GetYear
Pr_GetDaysInMonth
Pr_IsLeapYear
Pr_IsValid
Pr_ToDateTime
و...
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
(احتمالاً لینک در آینده ویرایش خواهد شد)
مراحل نصب تاریخ شمسی در دیتابیس SQLServer:
1) اجرای GHDiamond.Sql.CLREnabled.sql
2) ریست سرویس SQLServer یا ریست رایانه
3) اجرای GHDiamond.Sql.Install.sql
البته بسته فوق شامل یک دیتابیس نمونه خالی هم است که فقط نیازی به اجرای مرحله (3) در فهرست فوق ندارد.
سپس میتوانید با تابع Pr_GetYear سال شمسی و با تابع Pr_GetMonth ماه شمسی را از datetime درون خود SQLServer استخراج کنید.
مثلاً دستور زیر میتواند تعداد سطرهای وابسته به هر فرد در هر ماه شمسی را باز گرداند.
و...کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
==============
روش سوم:
فقط از یک جدول برای ثبت این وقایع استفاده کنید و از نوعی فیلد تاریخ شمسی استفاده کنید.
مثلاً ذخیره سال و ماه در دو فیلد عددی مستقل...
یا بهتر از آن ذخیره تعداد ماه های گذشته از اول هجرت ...
(Y*12+M-1 عدد 16697 برای شهریور 1391 و...)
و...کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
احتمالاْ بدترین حالت هم آن است که تاریخ را بصورت string شمسی ذخیره کنید. مثلاْ "1391/06/01"
اینطور هم باز میتوانید با دستور زیر مشکلتان را حل کنید.
و...کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
==============
البته کدهای فوق را میتوان برای بازدهی بیشتر بهینه تر نوشت.
همانطورکه قبلا گفتم پاسخ این مسئله وابستگی به ذات نحوه ذخیره سازی تاریخ شما و مواجه با آن دارد.
روش تان را انتخاب کنید، باز اگر مشکلی بود بفرمائید.
موفق باشید.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)