如何在SQL中获取Month的日期

时间:2017-01-16 13:41:38

标签: sql sql-server

有没有办法使用以下方案在SQL中获取特定日期;

日期是20日:

1。)如果当月的日期是2017年1月23日,那么我想从2017年1月20日开始,即3天

2。)如果当月的日期是2017年1月17日,那么我想从2016年12月20日开始收到所有内容。

所以焦点是当前月份的20日或前一个月的日期。

关于如何在SQL中构建它的任何想法?

3 个答案:

答案 0 :(得分:0)

此表达式应该找到过去一个月中最近的20个月:

select
    DATEADD(month,
        DATEDIFF(month,'20010101',GETDATE()),
        CASE WHEN DATEPART(day,GETDATE()) < 20  THEN '20001220'
                                                ELSE '20010120' END)

它的工作原理是计算过去和今天某个固定日期之间的整个月份。

然后我们将这个月数添加到另一个固定日期 - 一个月的20日。但我们使用CASE来确定第二个固定日期与第一个日期相比的关系 - 它是同月还是前一个?

答案 1 :(得分:0)

你总是可以使用MONT(日期字段)来获取日期月份的数值,你可以在上个月做-1,YEAR(日期字段)的工作方式相同。

希望它有所帮助!

问候

答案 2 :(得分:0)

我通常会为这种操作构建一些函数,它可以及时更改并且很容易修改。

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

然后你可以将它添加到连接句子中,或者使用如下的选择句子直接调用它:

select StartDate, EndDate from GetDates(14);

可以尝试here