Вы хотите создать начальный момент этого месяца и начальный момент следующего месяца, затем взять даты, начиная с включающего момента и до, но не включая следующий начальный момент.
т.е. результат должен быть эквивалентен:
Where PostDate >= '01/01/2009' and PostDate < '02/01/2009'
Это даст вам ровно тот месяц, и не будет совпадений с ним в следующем месяце.
Выражение DATEDIFF(mm, 0, '2009-01-28')
даст вам количество месяцев от 01/01/1900
, поэтому вы должны использовать эту дату в качестве третьего параметра в DATEADD
:
DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), '01/01/1900')
Чтобы получить начальный момент следующего месяца, просто используйте '02/01/1900'
в качестве смещения. Давайте поместим это в условие:
Where
PostDate >= DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), '01/01/1900') and
PostDate < DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), '02/01/1900')