计算查询中不同天数

时间:2013-08-09 17:55:09

标签: sql-server-2008 tsql

我们有一个包含StartDate字段的表,其中包含一种日期时间。有成千上万的记录,我正在寻找一种方法来查找从该表返回的给定结果中的天数。例如,如果我的表有这些数据:

ID | StartDate
--------------
1   01/01/2013 09:34:54
2   01/01/2013 11:23:21
3   04/11/2013 14:43:23
4   04/11/2013 17:13:03
5   04/25/2013 18:02:59
6   07/21/2013 02:56:12
7   10/01/2013 19:43:10

然后查询应返回 5 ,因为2013年1月1日的2个日期计为1,而对于04/11/2013则相同。

我唯一能够提出的SQL是:

SELECT COUNT(DISTINCT(DATEPART(DAY, StartDate)))
FROM Stats
WHERE StartDate BETWEEN '01/01/2013' AND '12/31/2013' --This is just for filtering

但是这会返回 4 ,因为它不会考虑月份。

感谢任何帮助。

1 个答案:

答案 0 :(得分:9)

您可以CAST作为日期

SELECT COUNT(DISTINCT CAST(StartDate AS DATE))
FROM   Stats
WHERE  StartDate >= '20130101' AND StartDate < '20140101' 

还可以使用明确的日期格式,例如yyyymmdd>= <而不是BETWEEN

您当前的查询将包含12月31日,如果有一行确切具有值20131231 00:00:00但不包含该日期不同的任何时间。我怀疑这是故意的。