اطلاعات بین دو بازه تاریخ
سلام دوستان
من یه کدی میخوام بنویسم
مثلا یک کارمند در بین بازه تاریخی چند روز مرخصی رفته، تا اینجا بین از تاریخ تا تاریخ میشه محاسبه کرد اما مشکل من انتهای ماه هست مثلا من میخوام بگم آقای x از تاریخ ۱۴۰۰/۱۱/۲۸ الی ۱۴۰۰/۱۲/۰۵ چند روز در بهمن ماه مرخصی رفته، به اصطلاح اسفند رو حساب نکنه اما بازه تاریخ حتما باید بهمن باشه چون برای تمام کارمندا میخوام محاسبه کنم
یه جدول پرسنل دارم ، یک جدول مرخصی
.ممنون از راهنمایی هاتون
نقل قول: اطلاعات بین دو بازه تاریخ
سلام و روز خوش
اول شرط انتخاب مرخصی ها رو تاریخ شروع بگذارین که در بهمن باشه،
بعد برای محاسبه زمان هم چک کنین که اگر تاریخ پایان در بهمن هست فقط روزها رو از هم کسر کنه وگرنه تاریخ پایان رو 30 بهمن در نظر بگیره و بعد محاسبه کنه.
نقل قول: اطلاعات بین دو بازه تاریخ
نقل قول:
نوشته شده توسط
mazoolagh
سلام و روز خوش
اول شرط انتخاب مرخصی ها رو تاریخ شروع بگذارین که در بهمن باشه،
بعد برای محاسبه زمان هم چک کنین که اگر تاریخ پایان در بهمن هست فقط روزها رو از هم کسر کنه وگرنه تاریخ پایان رو 30 بهمن در نظر بگیره و بعد محاسبه کنه.
با یک کد امکانش باشه بفرمایید
نقل قول: اطلاعات بین دو بازه تاریخ
1- اول یک تابع بنویسین (مثلا به اسم Calc_Days) که تاریخ شروع و پایان رو بعنوان پارامتر بگیره و طبق خواسته محاسبه کنه
2- در select ، این تابع رو استفاده کنین:
SELECT start_date , end_date , Calc_Days(start_date,end_date) AS days , ... FROM ... WHERE ...
نقل قول: اطلاعات بین دو بازه تاریخ
با فرض منطقی که:
1- تاریخ فارسی بصورت integer ذخیره شده
2- اگر تاریخ شروع و پایان یکی باشن 1 روز منظور میشه (و نه 0 روز)
FUNCTION Calc_Days(@start_date int, @end_date int)
RETURNS int
AS
BEGIN
DECLARE @X int
IF @start_date/100=@end_date/100 /* SAME MONTH */
SET @X=@end_date-@start_date+1
ELSE
BEGIN
DECLARE @start_dayofmonth int = @start_date % 100
DECLARE @start_month int = (@start_date/100) % 100
IF @start_month < 7
SET @X=31-@start_dayofmonth+1
ELSE
IF @start_month<12
SET @X=30-@start_dayofmonth+1
ELSE
SET @X=29-@start_dayofmonth+1
END
RETURN @X
END