根据您的实际需求(无论您是否遵守用户的日期优先设置,使用星期日而不考虑设置等),对于每周的第一天,可能会有点棘手,请参阅此问题:Get first day of week in SQL Server。这里有一种方法:
DECLARE
@today DATE = CURRENT_TIMESTAMP,
@y DATE,
@m DATE,
@w DATE;
SELECT
@y = DATEADD(YEAR, DATEDIFF(YEAR, 0, @today), 0),
@m = DATEADD(MONTH, DATEDIFF(MONTH, 0, @today), 0),
@w = DATEADD(DAY, 1-DATEPART(WEEKDAY, @today), @today);
SELECT
[First day of year] = @y,
[First day of month] = @m,
[First day of week] = @w;
无论你在哪一个人之后,你都可以在查询中使用,例如,为YTD你可以使用:
SELECT TicketCount = COUNT(TicketID)
FROM dbo.Ticket
WHERE DtCheckOut >= @y;
真的不认为你需要查询的<部分,如果你想获得数到现在。如果我今天正在运行查询,明天将签出多少张门票?如果你想保护自己免受您可以使用:
SELECT COUNT(TicketID)
FROM dbo.Ticket
WHERE DtCheckOut >= @y
AND DtCheckOut < DATEADD(DAY, 1, @now);
你可以让它多了几分活力和传递,上面写着“YTD”,“MTD”或“WTD”,例如参数
CREATE PROCEDURE dbo.CountTickets
@Range CHAR(3) = 'YTD'
AS
BEGIN
SET NOCOUNT ON;
-- you may want to handle invalid ranges, e.g.
IF @Range NOT IN ('YTD', 'MTD', 'WTD')
BEGIN
RAISERROR('Please enter a valid range.', 11, 1);
RETURN;
END
DECLARE
@today DATE = CURRENT_TIMESTAMP,
@start DATE;
SELECT
@start = CASE @range
WHEN 'YTD' THEN DATEADD(YEAR, DATEDIFF(YEAR, 0, @today), 0)
WHEN 'MTD' THEN DATEADD(MONTH, DATEDIFF(MONTH, 0, @today), 0)
WHEN 'WTD' THEN DATEADD(DAY, 1-DATEPART(WEEKDAY, @today), @today)
END;
SELECT
Range = @range,
TicketCount = COUNT(TicketID)
FROM dbo.Ticket
WHERE dtCheckOUt >= @start;
END
GO
你想在同一个查询中的所有三个总数?对你而言,第一天是什么意思? –
对不起 - 没有三个不同的查询,所有类似的目标...星期一(为此)是星期天。 – Fuginator
呵呵,并且更加清楚,我想COUNT()TicketID列... – Fuginator