12

假设我们在 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 语法是什么?

日期 计数
2009年 19 月 5 日 2
2009年 5 月 20 日 1

4

5 回答 5

17

您需要对日期字段的仅日期版本进行任何分组,例如这个。

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))
于 2009-05-20T13:19:37.380 回答
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)
于 2009-05-20T13:19:41.263 回答
1

取决于您的DBMS。Mysql 示例:

SELECT DATE_FORMAT(dateColumn, '%e/%c/%Y') as `date`, COUNT(*)
FROM YourTable
GROUP BY `date`
于 2009-05-20T13:20:38.643 回答
0

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

select date(datetimeColumn) as myDate, count(*) as myTotal
from thisTable
Group by myDate
Order by myTotal, myDate
于 2009-05-20T13:26:00.957 回答
0

在谷歌搜索后也找到了这个......

选择 CAST(FLOOR(CAST(Expr1 AS FLOAT)) AS DATEtime) AS Expr1,

COUNT(*) AS Expr2

来自 MY_TABLE

通过...分组

CAST(FLOOR(CAST(Expr1 AS FLOAT)) 作为日期时间)

缺点?

  1. 高速执行
  2. 返回的结果采用原始语言环境。前希腊语 19/5/2009

谢谢你们

于 2009-05-20T20:50:30.717 回答