Как получить последний день месяца с помощью служб отчетов SQL - PullRequest
15 голосов
/ 18 мая 2010

В службах отчетов SQL Server как рассчитать последний день текущего месяца?

Ответы [ 6 ]

39 голосов
/ 18 мая 2010

Вот ответ, который я придумал

=DateSerial(Year(Now()), Month(Now()), "1").AddMonths(1).AddDays(-1)
21 голосов
/ 24 мая 2012

Мне потребовалось некоторое время, чтобы понять это, и ответ JC был самым простым для модификации и имел хорошую логическую структуру. Я расширил его немного для других, ищущих ответы на эту тему. Я обнаружил, что обычно вы хотите не только последний день месяца / года, но и первый день месяца / года. Так что вот они полные строки для расчета именно этого. С версией SQl там тоже.

Первый день текущего месяца

SSRS=Today.AddDays(1-Today.Day)
SQL=SELECT DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,getdate()),0))

Последний день текущего месяца

SSRS=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)
SQL=SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

Первый день текущего года

SSRS=Today.AddMonths(1-Today.month).AddDays(1-Today.day)
SQL=SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

Последний день текущего года

SSRS=Today.AddDays(1-Today.Day).AddMonths(13-today.month).AddDays(-1)
SQL=SELECT DATEADD(dd,-1,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0)))

Надеюсь, это поможет Сомоне.

9 голосов
/ 23 мая 2010

Я знаю, что вы нашли свой ответ, но я бы предложил этот вариант:

=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)

На мой взгляд, его немного легче читать, и он может иметь немного лучшую производительность (хотя, скорее всего, незаметно)

И, конечно, если вы хотите добавить эту дату к 23:59:59, как это часто необходимо, просто слегка измените:

=Today.AddDays(1-Today.Day).AddMonths(1).AddSeconds(-1)
0 голосов
/ 27 марта 2019

Вы можете попробовать это выражение, просто замените его на свое поле даты.

= DateSerial (год (сейчас), месяц (сейчас), 1)

Надеюсь, это поможет.

Привет

0 голосов
/ 18 мая 2010

Из блога члена команды Microsoft SQL:

-- returns the last day of the current month.
select dbo.Date(year(getdate()), month(getdate())+1,0)

http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx

Надеюсь, это поможет! --Dubs

0 голосов
/ 18 мая 2010

вы можете использовать сборку для выполнения этой работы, добавив ее в качестве ссылки.

...