如何在SQL中获取月份日期

如何在SQL中获取月份日期,sql,sql-server,Sql,Sql Server,是否有一种方法可以使用以下场景在SQL中获取特定日期 日期是20号: 如果本月的日期是2017年1月23日,则我希望从2017年1月20日起获得所有信息,即3天 如果本月的日期是2017年1月17日,那么我希望从2016年12月20日开始获取所有信息 因此,焦点是本月的20号或基于当前日期的上一个月 关于如何在SQL中构造此表达式,您有什么想法吗?此表达式应在过去一个月的最近20日找到: select DATEADD(month, DATEDIFF(month,'2001

是否有一种方法可以使用以下场景在SQL中获取特定日期

日期是20号:

  • 如果本月的日期是2017年1月23日,则我希望从2017年1月20日起获得所有信息,即3天

  • 如果本月的日期是2017年1月17日,那么我希望从2016年12月20日开始获取所有信息

  • 因此,焦点是本月的20号或基于当前日期的上一个月


    关于如何在SQL中构造此表达式,您有什么想法吗?

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

    select
        DATEADD(month,
            DATEDIFF(month,'20010101',GETDATE()),
            CASE WHEN DATEPART(day,GETDATE()) < 20  THEN '20001220'
                                                    ELSE '20010120' END)
    
    选择
    日期(月),
    DATEDIFF(月'20010101',GETDATE()),
    DATEPART(day,GETDATE())小于20然后为'20001220'时的情况
    其他"20010120"(完)
    
    它的工作原理是计算过去某个固定日期与今天之间的总月数


    然后我们把这个月数加到另一个固定的日期上——一个月的20号。但是我们使用
    CASE
    来确定第二个固定日期与第一个固定日期之间的关系-是同一个月还是上一个月?

    您可以始终使用
    month(date字段)
    来获取日期月份的数值,您只需对上一个月、
    年(date字段)执行-1即可
    的工作原理与此相同。

    我通常为此类操作构建一些函数,它可以及时更改,并且易于修改

    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
    

    您可以试试。

    您使用的是什么数据库管理系统?你的日期栏是什么样的?请举例说明您正在使用的数据库管理系统。(许多产品在日期/时间方面远远不符合ANSI SQL。)还添加一些示例表数据和预期结果-以及格式良好的文本。如果日期是20号,那么是上个月还是下个月的数据呢?SQL Server是DBMS请编辑您的问题,以包括相关表DDL,一些示例日期为DML,以及预期的结果\
    select StartDate, EndDate from GetDates(14);