2016-06-02 3 views
0

Я пытаюсь запросить данные в диапазоне от начала года, месяца и конца года и месяца. Но SQL возвращается на год и месяц. Может ли кто-нибудь определить проблему с моим подходом.TSQL SELECT данные в пределах диапазона года и месяца

Спасибо!

ALTER PROCEDURE xxx 
(@JaarBegin AS int 
, @JaarEind AS int 
, @MaandBegin AS int 
, @MaandEind AS int) 

AS 
BEGIN 

WITH 
CTE AS 
(
SELECT [D_Medewerker_ID] 
     ,[Gebruikersnaam] 
     ,[Naam] 
     ,[Afdelingscode] 
     ,CONVERT(date, [Datum_uit_dienst]) AS DatumIn 
     ,CONVERT(date, [Datum_in_dienst]) AS DatumUit 
FROM [DM].[dm].[D_Medewerker] AS M 
), 
CTE2 AS(
SELECT F.[D_Functie_ID] 
     ,[Generieke_Functie] 
     ,[Specifieke_Functie] 
     ,Fo.[D_Medewerker_ID] 
    FROM [DM].[dm].[D_Functie] AS F 
    JOIN dm.dm.F_FormatieBezetting AS Fo 
    ON F.D_Functie_ID = Fo.D_Functie_ID 
) 

SELECT DISTINCT CTE.[Gebruikersnaam] 
, CTE.Naam 
, CTE.Afdelingscode 
, CTE.DatumIn 
, CTE.DatumUit 
, CTE2.Generieke_Functie 
, CTE2.Specifieke_Functie 
FROM CTE 
JOIN CTE2 
ON CTE.D_Medewerker_ID = CTE2.D_Medewerker_ID 
WHERE DATEPART(year,CTE.DatumUit) BETWEEN @JaarBegin AND @JaarEind 
AND DATEPART(MONTH, CTE.DatumUit) >= @MaandBegin AND DATEPART(MONTH, CTE.DatumUit) <= @MaandEind 
ORDER BY CTE.DatumUit DESC; 
END 
+0

Какую версию сервера sql вы используете? –

ответ

0

Вам необходимо преобразовать значения int, которые вы получаете в значение даты.

В SQL Server 2012 или более поздней версии, вы можете использовать встроенную функцию DATEFROMPARTS, чтобы сделать это:

WHERE CTE.DatumUit >= DATEFROMPARTS (@JaarBegin , @MaandBegin , 1) 
AND CTE.DatumUit < DATEADD(MONTH, 1, DATEFROMPARTS (@JaarEind , @MaandBegin , 1)) 

Если вы работаете с более ранней версией SQL Server, необходимо создать строку, представляет дату (с использованием формата iso yyyy-mm-dd), а затем отсылает ее на дату:

WHERE CTE.DatumUit >= CAST(RIGHT('0000' + CAST(@JaarBegin as varchar(4)), 4) + '-' + RIGHT('00' + CAST(@MaandBegin as varchar(2)), 2) +'-01' as datetime) 
AND CTE.DatumUit < DATEADD(MONTH, 1, CAST(RIGHT('0000' +CAST(@JaarEind as varchar(4)), 4) + '-' + RIGHT('00' + CAST(@MaandBegin as varchar(2)), 2) +'-01' as datetime)) 
+0

Nice, that worx .. Действительно, я работаю с более ранней версией. Я должен посмотреть на ваше решение, чтобы лучше понять, что происходит. –