Здесь будет мое решение. Вы можете оставить год как NULL, но тогда у вас есть возможность выбрать год, если хотите.
Test Data
IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData
GO
CREATE TABLE #TestData (ID int, DateField datetime)
INSERT INTO #TestData (ID, DateField)
VALUES
(1,'2016-01-01')
,(2,'2016-02-02')
,(3,'2016-01-25')
,(4,'2016-02-16')
,(5,'2015-01-12')
,(6,'2015-01-20')
Запрос
DECLARE @MonthVariable int; SET @MonthVariable = '1'
DECLARE @YearVariable int; SET @YearVariable = '2016'
SELECT
ID
,Datefield
FROM #TestData
WHERE DATEPART(mm,DateField) = @MonthVariable
AND (DATEPART(yy,DateField) = @YearVariable
OR @YearVariable IS NULL)
Выход
ID Datefield
1 2016-01-01 00:00:00.000
3 2016-01-25 00:00:00.000
Если вы хотите всегда текущий год, то вы можете сделать это;
DECLARE @MonthVariable int; SET @MonthVariable = '1'
SELECT
ID
,Datefield
FROM #TestData
WHERE DATEPART(mm,DateField) = @MonthVariable
AND DATEPART(yy,DateField) = DATEPART(yy,GETDATE())
ГДЕ DATEPART (год, DateField) = YearVariable И DATEPART (мм, DateField) = MonthVariable –
я хочу год быть в текущем году без ввода его –
I «Я только что отправил свой код в качестве ответа, посмотрим, соответствует ли это вашим требованиям –