سلام دوستان
یک سوال داشتم برای نوشتن یک کویری.
فرض کنید کارمندی در یک شرکت از تاریخ
1398/12/25
تا تاریخ
1399/01/05
به مرخصی رفته و این مرخصی در سیستم ثبت شده.
تاریخ شروع مرخصی در فیلد StartDate و تاریخ پایان مرخصی در فیلد EndDate ثبت شده.
حالا من میخوام یک کویری بنویسم که مجموع مرخصی های این کاربر رو در سال 98 نمایش بده
Select * From Leave_Tbl Where StartDate => '1398/01/01' And EndDate <= '1398/12/29'
البته تاریخ ها در دیتابیس به صورت میلادی هستن و برای فهم بهتر مطلب اینجا شمسی نوشتم.
الان در کویری بالا مرخصی کاربر که در بالا بهش اشاره کردم در شرط نمایش داده نمیشه چون تاریخ پایان مرخصی در شرط صحیح نیست و به عبارتی مرخصی کاربر رو 0 محاسبه میکنه در حالی که کاربر در سال 98 مدت 5 روز مرخصی داشته. کویری رو چجوری بنویسم که بشه این مدت مرخصی رو محاسبه کرد؟
سلام
بهتر بود برای این سوال تاریخ ها رو به صورت میلادی می نوشتید چون تمامی عملگرهای 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 چه تعداد روز مرخصی داشته است. که به راحتی با اسنفاده از کوئری بالا می تونید این مقدار را محاسبه کنید
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
87
- پاسخ :
1
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1067
- پاسخ :
1
|
تاریخ :
1400/08/02
- ساعت :
02:35:00 PM
- بازدید :
2572
- پاسخ :
1
|
تاریخ :
1403/01/15
- ساعت :
04:12:00 PM
- بازدید :
812
- پاسخ :
2
|
تاریخ :
1402/10/18
- ساعت :
10:45:00 PM
- بازدید :
719
- پاسخ :
2
|
تاریخ :
1402/08/18
- ساعت :
08:43:00 AM
- بازدید :
1347
- پاسخ :
0
|
تاریخ :
1402/08/16
- ساعت :
09:45:00 PM
- بازدید :
1053
- پاسخ :
1
|
تاریخ :
1402/06/27
- ساعت :
12:27:00 PM
- بازدید :
1474
- پاسخ :
2
|
تاریخ :
1402/06/25
- ساعت :
11:37:00 AM
- بازدید :
1052
- پاسخ :
1
|
تاریخ :
1402/06/18
- ساعت :
10:36:00 AM
- بازدید :
1775
- پاسخ :
2
|
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
87
- پاسخ :
1
|
تاریخ :
1400/07/17
- ساعت :
10:39:00 PM
- بازدید :
2335
- پاسخ :
0
|
تاریخ :
1403/09/05
- ساعت :
06:32:00 PM
- بازدید :
70
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2037
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
149
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1067
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
473
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
948
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1378
- پاسخ :
1
|