БОЛЬШОЕ РЕДАКТИРОВАНИЕ
Теперь разберитесь с ОП.
Используйте общее табличное выражение и левое соединение, чтобы получить этот эффект.
DECLARE @FirstDay DATETIME;
-- Set start time
SELECT @FirstDay = '2009-01-01';
WITH Days AS
(
SELECT @FirstDay as CalendarDay
UNION ALL
SELECT DATEADD(d, 1, CalendarDay) as CalendarDay
FROM Days
WHERE DATEADD(d, 1, CalendarDay) < DATEADD(m, 1, @FirstDay)
)
SELECT DATEPART(d,d.CalendarDay), **t.date should be (d.CalendarDay)**, t.Name FROM Days d
LEFT JOIN tbl t
ON
d.CalendarDay = t.Date
ORDER BY
d.CalendarDay;
Оставил этот оригинальный ответ внизу
Вам нужно DATEPART , сэр.
SELECT * FROM tbl WHERE DATEPART(m,Date) = 1
Если вы хотите выбрать месяц и год, вы можете использовать DATEPART дважды или перейти на диапазон.
SELECT * FROM tbl WHERE DATEPART(m,Date) = 1 AND DATEPART(yyyy,Date) = 2009
Диапазон: -
SELECT * FROM tbl WHERE Date >= '2009-01-01' AND Date < '2009-02-01'
См. Эту ссылку для получения дополнительной информации о DATEPART.
http://msdn.microsoft.com/en-us/library/ms174420.aspx