我有一张桌子举行活动和日期:
NAME | DOB
-------------------
Adam | 6/26/1999
Barry | 7/18/2005
Daniel| 1/18/1984
我有另一个表将日期范围定义为开始时间或结束时间,每个表都有一个描述性代码:
CODE | DATE
---------------------
YearStart| 6/28/2013
YearEnd | 8/14/2013
我正在尝试编写 SQL 来查找在第二个表中描述的时间的开始和结束之间的所有 Birthdates。YearStart 总是在六月,YearEnd 总是在八月。我的想法是尝试:
SELECT
u.Name
CAST(MONTH(u.DOB) AS varchar) + '/' + CAST(DAY(u.DOB) AS varchar) as 'Birthdate',
u.DOB as 'Birthday'
FROM
Users u
WHERE
MONTH(DOB) = '7' OR
(MONTH(DOB) = '6' AND DAY(DOB) >= DAY(SELECT d.Date FROM Dates d WHERE d.Code='YearStart')) OR
(MONTH(DOB) = '8' AND DAY(DOB) <= DAY(SELECT d.Date FROM Dates d WHERE d.Code='YearEnd')))
ORDER BY
MONTH(DOB) ASC, DAY(DOB) ASC
但这并没有通过,我猜是因为不能保证内部 SELECT 语句只会返回一行,所以不能被解析为日期时间。我如何实际完成此查询?