2016-06-02 7 views
0

開始年月と終了年月の範囲内のデータを照会しようとしています。しかし、SQLは選ばれた年と月を返します。誰でも私のアプローチで問題を特定できますか?TSQL年月の範囲内のデータを選択

ありがとうございます!

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 Serverを使用しているのですか?(iso形式yyyy-mm-ddを使用して)日付を表します。 –

答えて

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の以前のバージョンで作業している場合は、その文字列を構築する必要があります

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

ニース、そのworx ..確かに私は以前のバージョンで作業しています。何が起きているのかをよりよく理解するために、あなたの解決策を見なければならないでしょう。 –

関連する問題