1

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

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

4

2 回答 2

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 日,也许只是减去年份就足够了。

于 2013-06-25T21:18:30.467 回答
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')
于 2013-06-25T21:05:54.503 回答