我在我的SQL查詢中有一個方案是我必須找出給定日期但多年的嬰兒記錄 假設 我的選擇日期是= 01/Jan/2014至31/Jan/2014在SQL Server中選擇查詢中的多個案例
我還有一個參數是年份,它要求我隨機選擇以前(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查詢是不明確的,並且具有error.I有單日期比較,它的正常,但當我添加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
我不明白的要求是正確的,但在這裏也一樣,我注意到,您正在使用的where子句中的功能。你應該看看這個鏈接 http://stackoverflow.com/questions/799584/what-makes-a-sql-statement-sargable –
我想選擇的多重年同一日期範圍內我剛纔所說的數據,我想做的事情是寫下精確的查詢,可以從用戶的年份多年選擇 - 給出 – DareDevil
也許我很笨,但我不明白你的情況在最後。如果@y = 2,那麼...爲什麼從無條件的另一個案例開始?爲什麼你有答案或答案。你想怎麼做?你想要enddate或enddate -1嗎?還有最後一件事,因爲你的條件<=如果它小於enddate-1它總是<=比enddate它自己所以你爲什麼需要或子句? –