SQLクエリにシナリオがありますが、指定された日付の赤ちゃんのレコードを見つける必要がありますが、複数の年から私の選択日が= 01/Jan/2014から31/Jan/2014であるとします
年という別のパラメーターがあり、以前 (1 ~ 3 年) に生まれた赤ちゃんのデータをランダムに選択するように求められます。現在の選択された日付が 2014 年で、年変数の値が 2 であるとします。
赤ちゃんのデータをそれぞれ現在の年に、また現在の日付より 1 年後などに持ってくる必要があります。以下は私の与えられたシナリオです。
--------------------------------------------
-- BABIES_TABLE
ID | Name | Age | DOB |
--------------------------------------------
1 JKL 3 21/Jan/2012
2 DEF 2 09/Jan/2013
3 ABC 1 04/Jan/2014
4 XYZ 1 02/Feb/2014
-- Date Range [01/Jan/2014 - 31/Jan/2014]
-- Year = 2
---------------------------------------------
ID | Name | Age | DOB |
---------------------------------------------
3 ABC 1 04/Jan/2014
2 DEF 2 09/Jan/2013
-- Date Range [01/Jan/2014 - 31/Jan/2014]
-- Year = 3
---------------------------------------------
ID | Name | Age | DOB |
---------------------------------------------
3 ABC 1 04/Jan/2014
2 DEF 2 09/Jan/2013
1 JKL 3 21/Jan/2012
以下は、あいまいでエラーのある私のSQlクエリです。単一の日付比較を試しましたが、問題ありませんが、 OR条件を追加すると、エラーが発生します
--MY SQL Query is Below
DECLARE @startDate AS DATETIME
DECLARE @enddate AS DATETIME
DECLARE @y AS INT
SET @startDate='2012-10-12'
SET @enddate='2012-10-20'
SET @y=2
SELECT * FROM BABIES_TABLE
WHERE
CAST(CONVERT(VARCHAR, BABIES_TABLE.DOB, 111) AS DATETIME) >= CASE
--If entered Year = 1
WHEN @y = 1 THEN
(@startDate)
--If entered Year = 2
WHEN @y = 2 THEN
CASE
(@startDate)
END
OR
CASE
YEAR(@startDate-1)
END
WHEN @y = 3 THEN
CASE
(@startDate)
END
OR
CASE
YEAR(@startDate-1)
END
OR
CASE
YEAR(@startDate-2)
END
END
END
AND
CAST(CONVERT(VARCHAR, BABIES_TABLE.DOB, 111) AS DATETIME) <= CASE
WHEN @y = 1 THEN
(@enddate)
WHEN @y = 2 THEN
CASE
(@enddate)
END
OR
CASE
YEAR(@enddate-1)
END
WHEN @y = 3 THEN
CASE
(@enddate)
END
OR
CASE
YEAR(@enddate-1)
END
OR
CASE
YEAR(@enddate-2)
END
END
END