CREATE FUNCTION GetDates(@Day int)
RETURNS @DateRange TABLE
(
StartDate DATETIME,
EndDate DATETIME
)
AS
BEGIN
DECLARE @StartDate VARCHAR(30),
@EndDate VARCHAR(30),
@CurDate DATETIME,
@CurDay INT;
SET @CurDate = GETDATE();
SET @CurDay = DAY(GETDATE());
SET @EndDate = CONVERT(VARCHAR(30), @CurDate, 112);
IF @CurDay <= @Day
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), DATEADD(month, -1, @CurDate)), 112);
END
ELSE
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), @CurDate), 112);
END
INSERT INTO @DateRange VALUES (CAST(@StartDate AS DATETIME), CAST(@EndDate AS DATETIME));
RETURN
END
GO
3 回答
这个表达式应该找到过去一个月中最近的20个月:
它的工作原理是计算过去和今天某个固定日期之间的整数月份 .
然后我们将这个月数添加到另一个固定日期 - 一个月的20日 . 但我们使用
CASE
来决定第二个固定日期与第一个固定日期的比较 - 是同月还是前一个?你总是可以使用MONT(日期字段)来获取日期月份的数值,你可以在上个月做-1,YEAR(日期字段)的工作方式相同 .
希望能帮助到你 !
问候
我通常会为这种操作构建一些函数,它可以及时更改并且很容易修改 .
然后你可以将它添加到连接句子,或者使用如下的选择句子直接调用它:
可以试试here .