【发布时间】:2019-03-12 06:12:14
【问题描述】:
我需要一个 SQL 查询来计算直到当前日期(直到当前月份和日期)特定年份的数据。我尝试了以下查询,它也过滤了上个月的日期,
您可以看到它在 1 月、2 月和 3 月过滤到 11 点。但我想计算 1 月、2 月和 3 月 11 日的全部数据
【问题讨论】:
标签: sql sql-server tsql
我需要一个 SQL 查询来计算直到当前日期(直到当前月份和日期)特定年份的数据。我尝试了以下查询,它也过滤了上个月的日期,
您可以看到它在 1 月、2 月和 3 月过滤到 11 点。但我想计算 1 月、2 月和 3 月 11 日的全部数据
【问题讨论】:
标签: sql sql-server tsql
检查这个。通常,您只需要之前的所有月份(几天无关紧要)和当前月份以及之前的几天。
where
(Month([OrderDate]) < MONTH(GETDATE()) OR
(Month([OrderDate]) = MONTH(GETDATE()) AND DAY([OrderDate]) < DAY(GETDATE())))
AND YEAR([ORDERDATE]) = 1997
【讨论】:
您可以使用<= 代替<,如下所示 -
where day(orderdate)<=day(getdate())
【讨论】:
在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
【讨论】:
DAY(ORDERDATE) <= DAY(GETDATE()) 中的= 将起作用。我已经更新了我的答案。
只需将getdate() 转换为date
where cast(orderdate as date)<= cast(getdate() as date)
【讨论】:
你可以试试:
where (Month([OrderDate]) < MONTH(GETDATE())
OR (Month([OrderDate]) = MONTH(GETDATE())
AND DAY([OrderDate]) < DAY(GETDATE())))
AND YEAR([ORDERDATE]) = 1998
【讨论】: