CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

如何根据出生日期,进行年龄段分组?

楼主jackLiuhq(honghong)2006-06-01 08:29:15 在 MS-SQL Server / 基础类 提问

第一个问题:  
   
  表里有个字段:birthdate  
  想根据出生日期,按照5岁进行分组,如:  
  10岁以下  
  10-14岁  
  15-19岁  
  20-24岁  
  25-29岁  
  30岁以上  
   
  我发现如果通过group   by   datediff(yyyy,birthdate,getdate()/5   进行分组  
  结果把15岁的也分到10-14岁了,结果很不准确。  
  请教该如何写?  
   
   
  第二个问题:  
  sql   server默认一星期从周日算起,我需要通过语句在存储过程里面,改成从周一算起?  
  语句怎么写?  
   
  谢谢 问题点数:20、回复次数:9Top

1 楼wgsasd311(自强不息)回复于 2006-06-01 08:41:36 得分 0

SET   DATEFIRST  
  将一周的第一天设置为从   1   到   7   之间的一个数字。  
   
  语法  
  SET   DATEFIRST   {   number   |   @number_var   }    
   
  Top

2 楼wgsasd311(自强不息)回复于 2006-06-01 08:46:21 得分 0

 
  select   *,(case     when   datediff(yyyy,birthdate,getdate())<10   then   '10岁以上'  
    when   datediff(yyyy,birthdate,getdate())   between   10   and   14   then   '10-14岁'  
    when   datediff(yyyy,birthdate,getdate())   between   10   and   14   then   '15-19岁'  
    when   datediff(yyyy,birthdate,getdate())   between   10   and   14   then   '20-24岁'  
    when   datediff(yyyy,birthdate,getdate())   between   10   and   14   then   '25-29岁'  
    else   '30岁以上'   end)   felei  
  from   tb   order   by   birthdate   descTop

3 楼dutguoyi(新鲜鱼排)回复于 2006-06-01 09:20:23 得分 0

select   *,(case     when   datediff(yyyy,birthdate,getdate())<10   then   '10岁以下'  
    when   datediff(yyyy,birthdate,getdate())   between   10   and   14   then   '10-14岁'  
    when   datediff(yyyy,birthdate,getdate())   between   15   and   19   then   '15-19岁'  
    when   datediff(yyyy,birthdate,getdate())   between   20   and   24   then   '20-24岁'  
    when   datediff(yyyy,birthdate,getdate())   between   25   and   29   then   '25-29岁'  
    else   '30岁以上'   end)   felei  
  from   tb   order   by   birthdate   desc  
  Top

4 楼jackLiuhq(honghong)回复于 2006-06-01 09:44:20 得分 0

发现通过上面的方式得到的结果和我的一样  
  Top

5 楼jackLiuhq(honghong)回复于 2006-06-01 09:44:50 得分 0

这样的话,还不如直接整除5,岂不更方便?Top

6 楼zhenmeiyisi(。。。)回复于 2006-08-24 22:43:26 得分 0

select   *,(case     when   datediff(yyyy,birthdate,getdate())<10   then   '10岁以下'  
    when   datediff(yyyy,birthdate,getdate())   between   10   and   14   then   '10-14岁'  
    when   datediff(yyyy,birthdate,getdate())   between   15   and   19   then   '15-19岁'  
    when   datediff(yyyy,birthdate,getdate())   between   20   and   24   then   '20-24岁'  
    when   datediff(yyyy,birthdate,getdate())   between   25   and   29   then   '25-29岁'  
    else   '30岁以上'   end)   felei  
  from   tb   order   by   birthdate   desc  
   
  ------------------  
  把所有的datediff(yyyy,birthdate,getdate())  
  替换成  
  datediff(YEAR,birthdate,getdate())+    
  (CASE   WHEN   (DATEADD(YEAR,datediff(YEAR,birthdate,getdate()),birthdate))>GETDATE()   THEN   1   ELSE   0   END)  
   
  试一下?  
  =====  
  select   *,(case     when   datediff(YEAR,birthdate,getdate())+    
  (CASE   WHEN   (DATEADD(YEAR,datediff(YEAR,birthdate,getdate()),birthdate))>GETDATE()   THEN   1   ELSE   0   END)<10   then   '10岁以下'  
   
    when   datediff(YEAR,birthdate,getdate())+    
  (CASE   WHEN   (DATEADD(YEAR,datediff(YEAR,birthdate,getdate()),birthdate))>GETDATE()   THEN   1   ELSE   0   END)   between   10   and   14   then   '10-14岁'  
   
    when   datediff(YEAR,birthdate,getdate())+    
  (CASE   WHEN   (DATEADD(YEAR,datediff(YEAR,birthdate,getdate()),birthdate))>GETDATE()   THEN   1   ELSE   0   END)   between   15   and   19   then   '15-19岁'  
   
    when   datediff(YEAR,birthdate,getdate())+    
  (CASE   WHEN   (DATEADD(YEAR,datediff(YEAR,birthdate,getdate()),birthdate))>GETDATE()   THEN   1   ELSE   0   END)   between   20   and   24   then   '20-24岁'  
   
    when   datediff(YEAR,birthdate,getdate())+    
  (CASE   WHEN   (DATEADD(YEAR,datediff(YEAR,birthdate,getdate()),birthdate))>GETDATE()   THEN   1   ELSE   0   END)   between   25   and   29   then   '25-29岁'  
   
    else   '30岁以上'   end)   felei  
   
  from   tb   order   by   birthdate   descTop

7 楼zhenmeiyisi(。。。)回复于 2006-08-24 23:05:04 得分 0

应该是:  
   
  datediff(YEAR,birthdate,getdate())+    
  (CASE   WHEN   (DATEADD(YEAR,datediff(YEAR,birthdate,getdate()),birthdate))>GETDATE()   THEN   0   ELSE   1   END)  
  Top

8 楼ldw701(★水若寒★)回复于 2006-08-25 18:03:02 得分 0

markTop

9 楼j9898(j9988)回复于 2006-08-25 23:58:45 得分 0

1.你不会先加1再除5?  
  2.好象是set   datefirst   具体看帮助Top

相关问题

关键词

得分解答快速导航

  • 帖主:jackLiuhq

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo