SQL查询以获取特定年份的当前日期(考虑月份和日期)的数据

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于SQL查询以获取特定年份的当前日期(考虑月份和日期)的数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句获取日期的月份

检查过期日期是否无效 - 获取当前月份和年份没有“/”

MySQL 获取月份、年份的日期列表

SQL Server 日期查询,年月作为单独的列

Wp查询日期之间的帖子,但任何年份

sql如何获取一列日期的年份和月份