我们有一个包含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 ,因为它不会考虑月份。
感谢任何帮助。
答案 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
但不包含该日期不同的任何时间。我怀疑这是故意的。