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】:您可以使用<=
代替<
,如下所示 -
where day(orderdate)<=day(getdate())
【讨论】:
谢谢。但两种解决方案都会返回数据,直到 3 月底(3 月 31 日)。我需要计算到当天(3 月 11 日)。 @VinodKumar,2019 年 3 月 11 日还是仅 1997 年?【参考方案3】:在AND
运算符中添加MONTH
和DAY
检查将起作用。
您能否使用示例数据尝试以下查询:
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) <= 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查询以获取特定年份的当前日期(考虑月份和日期)的数据的主要内容,如果未能解决你的问题,请参考以下文章