【发布时间】:2010-07-26 00:28:52
【问题描述】:
我有一个查询(用于 bug tracker.net),它按状态按周计算错误数量。但是查询返回的是周数,我真正想要的是一周的第一个日期
select datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date)))
as [week], bg_status , st_name as [status], count(*) as [count]
from bugs inner join statuses on bg_status = st_id
group by datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))),
bg_status, st_name
order by [week], bg_status
获取周数的部分是
datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))) as [week]
它返回这个输出:
week bg_status status count
----------- ----------- --------------------------------------------- ------
22 1 new 1
22 5 closed 32
但最好说每周的第一个日期,例如 01-01-2010,然后是 08-01-2010,等等
问题不是How do you get the "week start date" and "week end date" from week number in SQL Server? 的重复项(答案说如何从日期开始而不是从周数开始)
不是Calculate date from week number的重复项(问题要求c#)
不是 Get first date of week from provided date 的重复项(问题要求使用 javascript)
我进行了搜索,但找不到针对 SQL Server(2010 如果重要的话)回答的这个问题
【问题讨论】:
-
DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))是做什么的?我怀疑它可以被简化。 -
@Gabe:我认为内部 DateDiff() 计算“日期 0”和错误报告日期之间的天数。然后,外部 DateAdd() 将该天数添加到“日期 0”,给出一个 DATE 值(或者,可能是一个具有 0 小时、0 分钟、0 秒的 DATETIME 值)。如果可以简化,我认为简化可能是
CAST(bg_reported_date AS DATE),如“周开始”表达式中使用的那样。 -
乔纳森:我就是这么想的,但你为什么要在调用
DATEPART时使用它是没有意义的。给定日期的所有时间都应始终返回相同的周数。
标签: sql-server tsql week-number bugtracker.net