如何根据出生日期,进行年龄段分组?
第一个问题:
表里有个字段: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




