Код T-SQL для получения DateTime содержит только месяц и год из любого DateTime - PullRequest
2 голосов
/ 01 октября 2009

Учитывая таблицу Event, содержащую поле с именем EventTime типа DateTime, и это значение будет содержать элементы даты и времени, мне нужно создать сводный запрос, который подсчитывает количество событий в каждом месяце.

Тип результирующего поля Group By также должен быть Date Time с элементом времени 0 и иметь значение 1-го дня месяца.

Это то, что у меня есть, но оно не очень элегантно, и я не уверен, что оно особенно эффективно.

  SELECT COUNT(1) AS [CountOfEvents],
         DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime))) AS [Month]
    FROM [Event]
GROUP BY DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime)))

Лучшие предложения для большей эффективности или элегантности?

Ответы [ 4 ]

10 голосов
/ 01 октября 2009

это этажей к месяцу:

select dateadd(month,datediff(m,0,GETDATE()),0);

выход:

-----------------------
2009-10-01 00:00:00.000

(1 row(s) affected)

так попробуйте это:

SELECT
   COUNT(*) as CountOF
    ,dateadd(month,datediff(m,0,EventTime),0)
    FROM [Event]
    GROUP BY dateadd(month,datediff(m,0,EventTime),0)
    ORDER BY 2
1 голос
/ 01 октября 2009
SELECT
    COUNT(1) AS [CountOfEvents],
    DATEADD(month, DATEDIFF(month, 0, [EventTime]), 0) AS [Month]
FROM [Event]
GROUP BY DATEADD(month, DATEDIFF(month, 0, [EventTime]), 0)
0 голосов
/ 01 октября 2009

может быть, это более «читабельно»:

SELECT
 COUNT(1) AS [CountOfEvents],
 CONVERT(datetime, CONVERT(varchar, EventTime, 112)) + 1 - DAY(EventTime) AS [Month]
FROM [Event]
GROUP BY CONVERT(datetime, CONVERT(varchar, EventTime, 112)) + 1 - DAY(EventTime)
0 голосов
/ 01 октября 2009

Существует функция MONTH(GetDate()) T-SQL, которую вы можете использовать.

Также вы просто пытаетесь убрать время из даты?

Если это так, попробуйте это:

DATEADD(d, DATEDIFF(d, 0, GetDate()), 0) 

Это немного чище и более читабельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...