Как рассчитать количество дней, оставшихся в месяце с указанной даты - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу подсчитать количество дней от 25/02/2019 в феврале и ожидаемый результат 4

Я пытался использовать master..spt_values на сервере sql, но не получил ожидаемый результат

declare @fdays int ,@d date=cast('20190201' as date),@JoinDate date=cast('20190225' as date)
select count(dateadd(dd,number,@d)) from master..spt_values
where type = 'p'
and month(dateadd(dd,number,@d))=month(@d)
and year(dateadd(dd,number,@d))=year(@d)    
and cast(GETDate() as date)>= Cast(dateadd(dd,number,@JoinDate) as date )

Результат кода выше 28, но я хочу 4

Пожалуйста, помогите мне найти ожидаемый результат

Ответы [ 3 ]

3 голосов
/ 05 апреля 2019

Это простая арифметика даты, вам не нужно использовать spt_values:

declare @d date = '20190225';

select datediff(month,0,@d) as MonthsDiff   -- Months since an arbitrary date
      ,dateadd(month,datediff(month,0,@d)+1,0) as StartOfFollowingMonth -- Add months above +1 to same arbitrary date
      ,datediff(day,@d,dateadd(month,datediff(month,0,@d)+1,0)) as DaysBetweenGivenDate -- DATEDIFF between given date and start of month from above;

Вывод:

+------------+-------------------------+----------------------+
| MonthsDiff |  StartOfFollowingMonth  | DaysBetweenGivenDate |
+------------+-------------------------+----------------------+
|       1429 | 2019-03-01 00:00:00.000 |                    4 |
+------------+-------------------------+----------------------+
0 голосов
/ 05 апреля 2019

Начиная с SQL Server 2012, вы можете просто использовать функцию EOMONTH:

SELECT DATEDIFF(DAY, '20190225', EOMONTH ('20190225')) + 1 [thedays]

= 4.

0 голосов
/ 05 апреля 2019

Попробуйте это:

 declare @date date='20140603'
    select datediff(day, @date, dateadd(month, 1, @date))-day(@date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...