【问题标题】:SQL query to get data till current date(considering month and date) for the particular yearSQL查询以获取特定年份的当前日期(考虑月份和日期)的数据
【发布时间】:2019-03-12 06:12:14
【问题描述】:

我需要一个 SQL 查询来计算直到当前日期(直到当前月份和日期)特定年份的数据。我尝试了以下查询,它也过滤了上个月的日期,

您可以看到它在 1 月、2 月和 3 月过滤到 11 点。但我想计算 1 月、2 月和 3 月 11 日的全部数据

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    检查这个。通常,您只需要之前的所有月份(几天无关紧要)和当前月份以及之前的几天。

    where
        (Month([OrderDate]) < MONTH(GETDATE()) OR
            (Month([OrderDate]) = MONTH(GETDATE()) AND DAY([OrderDate]) < DAY(GETDATE())))
        AND YEAR([ORDERDATE]) = 1997
    

    【讨论】:

      【解决方案2】:

      您可以使用&lt;= 代替&lt;,如下所示 -

      where day(orderdate)<=day(getdate())
      

      【讨论】:

      • 谢谢。但两种解决方案都会返回数据,直到 3 月底(3 月 31 日)。我需要计算到当天(3 月 11 日)。
      • @VinodKumar,2019 年 3 月 11 日还是仅 1997 年?
      【解决方案3】:

      AND 运算符中添加MONTHDAY 检查将起作用。

      您能否使用示例数据尝试以下查询:

      DECLARE @Orders TABLE (Id INT IDENTITY(1,1) NOT NULL, OrderDate DATETIME NOT NULL);
      
      INSERT INTO @Orders (OrderDate) VALUES 
      ('1997-01-01 10:00:00'), ('1997-01-15 10:00:00'), ('1997-01-13 10:00:00'),
      ('1997-02-02 10:00:00'), ('1997-02-20 10:00:00'), ('1997-02-13 10:00:00'),
      (GETDATE()), (DATEADD(DAY, +10, GETDATE()));
      
      SELECT *
      FROM @Orders 
      WHERE YEAR(OrderDate) = 1997 
            AND (MONTH(ORDERDATE) <= MONTH(GETDATE()) AND DAY(ORDERDATE) < DAY(GETDATE()))
      

      输出将是:

      Id  | OrderDate
      -----------------------------
      1   | 1997-01-01 10:00:00.000
      4   | 1997-02-02 10:00:00.000
      

      【讨论】:

      • 谢谢。这也会导致同样的问题。它也过滤了前几个月的一天。我标记为答案的解决方案可以正常工作并满足我的需要。
      • @VinodKumar 为避免这种情况,删除DAY(ORDERDATE) &lt;= DAY(GETDATE()) 中的= 将起作用。我已经更新了我的答案。
      【解决方案4】:

      只需将getdate() 转换为date

      where cast(orderdate as date)<= cast(getdate() as date)
      

      【讨论】:

      • 这不允许得到 1997 年。
      【解决方案5】:

      你可以试试:

      where  (Month([OrderDate]) < MONTH(GETDATE()) 
         OR (Month([OrderDate]) = MONTH(GETDATE()) 
         AND DAY([OrderDate]) < DAY(GETDATE())))
         AND YEAR([ORDERDATE]) = 1998
      

      【讨论】:

        猜你喜欢
        • 2013-02-15
        • 2017-01-19
        • 1970-01-01
        • 2023-03-20
        • 2021-07-17
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多