دسته بندی ها
14:48 1399/04/06

محاسبه روزهای بین 2 تاریخ در Sql Server

مشخصات سوال کننده :
کاربر : hamid_b     امتیاز کاربر : 518     رتبه کاربر : 4
دسته بندی : Sql Server

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4186
هوش مصنوعی

پاسخ هوش مصنوعی

برای محاسبه مجموع روزهای مرخصی یک کاربر در سال 98 با توجه به اینکه تاریخ ها به صورت میلادی در دیتابیس ثبت شده اند، می توانید از کویری زیر استفاده کنید. این کویری تاریخ های مرخصی را به صورت کارآمدی فیلتر می کند تا برش های مرخصی را در بر بگیرد.


SELECT 
    SUM(DATEDIFF(DAY, 
        CASE 
            WHEN StartDate < '2019-03-21' THEN '2019-03-21' 
            ELSE StartDate 
        END, 
        CASE 
            WHEN EndDate > '2019-12-29' THEN '2019-12-29' 
            ELSE EndDate 
        END)) AS TotalLeaveDays
FROM 
    Leave_Tbl 
WHERE 
    StartDate <= '2019-12-29' 
    AND EndDate >= '2019-03-21'

در این کویری:

  • تاریخ شروع مرخصی را بررسی می کنیم و اگر قبل از تاریخ 21 مارس 2019 (معادل آغاز سال 98 شمسی) باشد، از این تاریخ شروع می کنیم.
  • تاریخ پایان مرخصی را بررسی می کنیم و اگر بعد از 29 دسامبر 2019 (معادل پایان سال 98 شمسی) باشد، از این تاریخ پایان می زنیم.
  • با استفاده از تابع SUM و DATEDIFF، مجموع روزهای مرخصی را محاسبه می کنیم.
به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 17:31 1399/04/06

سلام

بهتر بود برای این سوال تاریخ ها رو به صورت میلادی می نوشتید چون تمامی عملگرهای sql Server بر روی تاریخ میلادی تعریف شدن. برای محاسبه تعداد روزهای خاص موجود در یک بازه خاص می تونید از این روش استفاده کنید.

 

select t.*,
       Sum(datediff(day,
                case when startdate < '2020-02-08' then '2020-02-08' else startdate end),
                case when enddate > '2020-02-12' then '2020-02-12' else startdate end)
               ) + 1) As myColumn
from t;

 

در کوئری بالا از تابع DateDiff در Sql Server استفاده شده. 

 

حال فرض کنید کارمند شما از تاریخ 2020-02-15 تا تاریخ 2020-02-24 به مرخصی رفته است. و شما میخواید بدونید که بین بازه 2020-02-08 تا 2020-02-12 چه تعداد روز مرخصی داشته است. که به راحتی با اسنفاده از کوئری بالا می تونید این مقدار را محاسبه کنید

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود