我的 SQL 查询中有一个场景是我必须找出具有给定日期但多年的婴儿记录假设我的选择日期是 = 01/Jan/2014 到 31/Jan/2014
我有另一个参数是年份,它要求我随机选择以前(1~3 岁)出生的婴儿的数据假设如果我当前选择的日期是 2014 年并且我的年份变量的值为 2,那么
我必须将婴儿的数据分别带到当年以及比当前日期少一年的时间等等以下是我的给定场景
--------------------------------------------
-- 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