3

我们有一个表,该表有一个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,2013 年 4 月 11 日也是如此。

我能想出的唯一 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,因为它没有考虑月份。

任何帮助表示赞赏。

4

1 回答 1

10

你可以CAST作为日期

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

还要使用明确的日期格式,例如yyyymmddand >= <not BETWEEN

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

于 2013-08-09T17:58:48.003 回答