首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL语句DATEPART帮助

SQL语句DATEPART帮助
EN

Stack Overflow用户
提问于 2011-03-05 00:07:00
回答 2查看 1K关注 0票数 0

这条SQL语句有什么问题?我一直得到SelMonth和CurMonth是无效的列,我的Where子句写错了吗?是DATEPART在这里引起了问题吗?

代码语言:javascript
复制
SELECT TOP (5) 
   EName, EDate, EDateEnd, 
   DATEPART(month, EDate) AS SelMonth, 
   DATEPART(month, { fn CURDATE() }) AS CurMonth
FROM         
   Events
WHERE     
   (EDate >= { fn CURDATE() }) 
   AND (SelMonth = CurMonth)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-05 00:13:42

不能在WHERE子句中使用SelMonth和CurMonth:

代码语言:javascript
复制
SELECT TOP (5) 
       EName, EDate, EDateEnd, 
       DATEPART(month, EDate) AS SelMonth, 
       DATEPART(month, { fn CURDATE() }) AS CurMonth
FROM   Events
WHERE  (EDate >= { fn CURDATE() }) 
       AND (DATEPART(month, EDate) = DATEPART(month, { fn CURDATE() }))
票数 3
EN

Stack Overflow用户

发布于 2011-03-05 00:13:21

由于SelMonth和CurMonth是派生列,因此它们在当前级别的查询中不可用。选项1: CTE (适用于SQL 2005及更高版本)

代码语言:javascript
复制
WITH evnts AS
(SELECT ename, 
        edate, 
        edateend, 
        Datepart(MONTH, edate)            AS selmonth, 
        Datepart(MONTH, { fn CURDATE() }) AS curmonth 
 FROM   events)
SELECT TOP (5) * 
  FROM  evnts
 WHERE   (EDate >= { fn CURDATE() }) AND (SelMonth = CurMonth) 

选项2:内联视图

代码语言:javascript
复制
SELECT TOP (5) * FROM
(SELECT ename, 
        edate, 
        edateend, 
        Datepart(MONTH, edate)            AS selmonth, 
        Datepart(MONTH, { fn CURDATE() }) AS curmonth 
 FROM   events)

WHERE     (EDate >= { fn CURDATE() }) AND (SelMonth = CurMonth) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5196265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档