','附近语法不正确(日期不起作用)

时间:2013-06-25 21:01:07

标签: sql-server-2008 syntax

执行此查询后,我收到上述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')

显然,日期中的逗号导致错误,但我不知道如何修复它。

2 个答案:

答案 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')