SELECT Id,NickName,(datepart(year,getdate()))-substring([BirthDay],1,4) as Age,Sex FROM Users WHERE Age>20 错误: Where子句后面不能使用别名Age 原因:SSMS对SQL语发解析是有阶段的,先解析 Where 子句,再解析select子句。显然在解析Where的时候Age并没有定义/引用 修改: SELECT Id,NickName,(datepart(year,getdate()))-substring([BirthDay],1,4) as Age,Sex FROM Users WHERE (datepart(year,getdate()))-substring([BirthDay],1,4) > 20
错误: Where子句后面不能使用别名Age
原因:SSMS对SQL语发解析是有阶段的,先解析 Where 子句,再解析select子句。显然在解析Where的时候Age并没有定义/引用
修改: SELECT Id,NickName,(datepart(year,getdate()))-substring([BirthDay],1,4) as Age,Sex FROM Users
WHERE (datepart(year,getdate()))-substring([BirthDay],1,4) > 20
2楼正解,按照sqlserver解析语句的顺序,where条件是优先于select的,因此age是不会被识别的;
另外有一点(datepart(year,getdate()))-substring([BirthDay],1,4) ,前面出来的是数字,后面出来的是字符,尽管系统会自动做隐式转换,但建议还是cast显示转成int类型;
DATEDIFF(YEAR,birthday,GETDATE())