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年 5 月 19 日 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

グーグルがこれも見つけた後...

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

COUNT(*) AS Expr2

FROM MY_TABLE

グループ化

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

短所は?

  1. 高速実行
  2. 返される結果は元のロケールです。ギリシャ語の例 19/5/2009

皆さん、ありがとうございました

于 2009-05-20T20:50:30.717 に答える