SQL Server Server查询 - 计算不同的DateTime字段

时间:2009-05-20 13:16:18

标签: sql sql-server distinct

假设我们在SQL Server表中有以下记录。

Date
19/5/2009 12:00:00 pm
19/5/2009 12:15:22 pm
20/5/2009 11:38:00 am

获取类似这样的SQL语法是什么?

日期 计数
19/5/2009 2
20/5/2009 1

5 个答案:

答案 0 :(得分:15)

您需要在日期字段的仅日期版本上进行任何分组,例如此。

SELECT
    CONVERT(VARCHAR(10), YourDateColumn, 101),
    COUNT(*)
FROM
    YourTable
GROUP BY
    CONVERT(VARCHAR(10), YourDateColumn, 101)

我通常这样做,因为它避免了转换为varchar。

SELECT
    DATEPART(yy, YourDateColumn),
    DATEPART(mm, YourDateColumn),
    DATEPART(dd, YourDateColumn),
    COUNT(*)
FROM
    YourTable
GROUP BY
    DATEPART(yy, YourDateColumn),
    DATEPART(mm, YourDateColumn),
    DATEPART(dd, YourDateColumn)

编辑:另一种获取日期时间日期部分的方法

DATEADD(d, 0, DATEDIFF(d, 0, YourDateColumn))

答案 1 :(得分:3)

这取决于您的数据库引擎。对于SQL Server 2008(以及将来的版本),您可以使用date类型执行此操作。

select
    convert(date, date_column_name) as Date,
    count(1) as Count

from table_name

group by convert(date, date_column_name)

答案 2 :(得分:1)

取决于您的DBMS。 Mysql示例:

SELECT DATE_FORMAT(dateColumn, '%e/%c/%Y') as `date`, COUNT(*)
FROM YourTable
GROUP BY `date`

答案 3 :(得分:0)

你在使用什么RDBMS?使用Sybase,您的查询将如下所示:

select date(datetimeColumn) as myDate, count(*) as myTotal
from thisTable
Group by myDate
Order by myTotal, myDate

答案 4 :(得分:0)

谷歌搜索后发现了这个......

SELECT CAST(FLOOR(CAST(Expr1 AS FLOAT))AS DATEtime)AS Expr1,

COUNT(*)AS Expr2

FROM MY_TABLE

GROUP BY

CAST(FLOOR(CAST(Expr1 AS FLOAT))AS DATEtime)

缺点?

  1. 高速执行
  2. 返回的结果位于原始区域设置中。前希腊语19/5/2009
  3. 谢谢大家