解决方案 »

  1.   

    BirthDay 这个字段里面的数据是否规范,如果长度不够就会报错的
      

  2.   

    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
      

  3.   

    报错的信息是什么,另外很可能是BirthDay字段的问题,你看一下,有没有NULL值有的话, 处理一下即可。
      

  4.   


    2楼正解,按照sqlserver解析语句的顺序,where条件是优先于select的,因此age是不会被识别的;
    另外有一点(datepart(year,getdate()))-substring([BirthDay],1,4) ,前面出来的是数字,后面出来的是字符,尽管系统会自动做隐式转换,但建议还是cast显示转成int类型;
      

  5.   

    不知道BIRTHDAY字段类型,及存储数据是否规范,比较日期差计算年龄可以用
    DATEDIFF(YEAR,birthday,GETDATE())