PDA

View Full Version : اطلاعات بین دو بازه تاریخ



m.4.r.m
یک شنبه 24 بهمن 1400, 08:31 صبح
سلام دوستان
من یه کدی میخوام بنویسم
مثلا یک کارمند در بین بازه تاریخی چند روز مرخصی رفته، تا اینجا بین از تاریخ تا تاریخ میشه محاسبه کرد اما مشکل من انتهای ماه هست مثلا من میخوام بگم آقای x از تاریخ ۱۴۰۰/۱۱/۲۸ الی ۱۴۰۰/۱۲/۰۵ چند روز در بهمن ماه مرخصی رفته، به اصطلاح اسفند رو حساب نکنه اما بازه تاریخ حتما باید بهمن باشه چون برای تمام کارمندا میخوام محاسبه کنم
یه جدول پرسنل دارم ، یک جدول مرخصی
.ممنون از راهنمایی هاتون

mazoolagh
دوشنبه 25 بهمن 1400, 10:45 صبح
سلام و روز خوش
اول شرط انتخاب مرخصی ها رو تاریخ شروع بگذارین که در بهمن باشه،
بعد برای محاسبه زمان هم چک کنین که اگر تاریخ پایان در بهمن هست فقط روزها رو از هم کسر کنه وگرنه تاریخ پایان رو 30 بهمن در نظر بگیره و بعد محاسبه کنه.

m.4.r.m
دوشنبه 09 اسفند 1400, 16:07 عصر
سلام و روز خوش
اول شرط انتخاب مرخصی ها رو تاریخ شروع بگذارین که در بهمن باشه،
بعد برای محاسبه زمان هم چک کنین که اگر تاریخ پایان در بهمن هست فقط روزها رو از هم کسر کنه وگرنه تاریخ پایان رو 30 بهمن در نظر بگیره و بعد محاسبه کنه.

با یک کد امکانش باشه بفرمایید

mazoolagh
یک شنبه 15 اسفند 1400, 12:01 عصر
1- اول یک تابع بنویسین (مثلا به اسم Calc_Days) که تاریخ شروع و پایان رو بعنوان پارامتر بگیره و طبق خواسته محاسبه کنه
2- در select ، این تابع رو استفاده کنین:
SELECT start_date , end_date , Calc_Days(start_date,end_date) AS days , ... FROM ... WHERE ...

mazoolagh
یک شنبه 15 اسفند 1400, 12:13 عصر
با فرض منطقی که:
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