执行此查询后,我收到上述SQL错误。
SELECT r.SectionIDNum, r.PeopleIDNum, r.Completed, c.CourseID, s.DistrictIDNum, s.EndDate
FROM Registration r, Course c, Section s
WHERE r.SectionIDNum=s.SectionID AND c.CourseID=s.CourseIDNum AND r.Completed='Y'
AND s.EndDate between ('2012-06-31', 'yyyy-mm-dd') and ('2013-07-01', 'yyyy-mm-dd')
显然,日期中的逗号导致错误,但我不知道如何修复它。
答案 0 :(得分:1)
六月只有30天。因此,SQL Server对您将6月31日作为约会的请求感到困惑。
这很好用:
SELECT CAST('2012-06-30' AS DATE)
避免月末问题的一种方法是使用DATEADD()
功能,例如,在2013年7月1日之前获得一年和一天,例如:
SELECT DATEADD(day,-1,(DATEADD(year,-1,CAST('2013-07-01' AS DATE))))
另外,请记住BETWEEN
是包容性的,所以你在你的例子中得到6月30日和7月1日,也许只是减去年份就足够了。
答案 1 :(得分:0)
使用CAST()函数(CAST将一种数据类型的值转换为另一种类型。在这种情况下,CHAR到DATETIME):
SELECT r.SectionIDNum
,r.PeopleIDNum
,r.Completed
,c.CourseID
,s.DistrictIDNum
,s.EndDate
FROM Registration r
,Course c
,Section s
WHERE r.SectionIDNum=s.SectionID
AND c.CourseID=s.CourseIDNum
AND r.Completed='Y'
AND s.EndDate BETWEEN CAST('20120630' AS DATETIME)
AND CAST('20130701'AS DATETIME)
你也可以使用:
CONVERT(DATETIME,'20130701')