2

クエリに日付フィールドがあり、次のような GROUP BY レポートを取得したい:

DATE    COUNT
2010-01  10
2010-02  2
...
2010-12  24
2012-13  34

SQL Server でこれを取得するための適切な構文は何ですか?

4

4 に答える 4

7

これらの文字列への変換はすべて機能しますが、この方法は読みにくいとはいえ、より効率的です。

SELECT m = DATEADD(MONTH, DATEDIFF(MONTH, 0, [DATE]), 0), COUNT(*)
  FROM dbo.TheTable
  GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, [DATE]), 0); 

式を繰り返したくない場合は、次のようにします。

;WITH x AS (SELECT m = DATEADD(MONTH, DATEDIFF(MONTH, 0, [DATE]), 0)
  FROM dbo.TheTable)
SELECT m, COUNT(*)
  FROM x GROUP BY m;

このようにして、出力は依然として日付/時刻の値であり、他の目的でそのように使用できます。また、面倒な文字列変換は必要ありません。

于 2012-06-26T19:30:43.307 に答える
2

あなたは簡単に行うことができます:

select convert(char(7), @myDate, 20)

declare @myDate as DateTime
set @myDate = '2012-06-23'
select convert(char(7), @myDate, 20)

出力

-------
2012-06

したがって、完全なステートメントは次のようになります。

select convert(char(7), myDate, 20), count(*) as Count
from MyTable
group by convert(char(7), myDate, 20)

アップデート

サンプルデータには値が含まれています2012-13。これはタイプミスであり、ダッシュの後の数字は月を表していると想定します。

于 2012-06-26T19:25:19.293 に答える
2
 CONVERT(VARCHAR(7), CreationDate, 120) as Date
于 2012-06-26T19:27:23.803 に答える
-2
SELECT CAST(DATEPART(year, dateCol) as VARCHAR) + '-' + CAST(DATEPART(month, dateCol) as VARCHAR) as Date, count(*) As Count
FROM myTable
GROUP BY CAST(DATEPART(year, dateCol) as VARCHAR) + '-' + CAST(DATEPART(month, dateCol) as VARCHAR)
于 2012-06-26T19:10:04.483 に答える