我想在SQL Server中按季度计算生日数 即1月1日至3月31日,4月1日至6月30日,7月1日至9月30日期间10月1日 - 12月31日。
请帮我使用Sql Server中的Date函数来执行此操作。
我通过DATETIME传递BDate。我想使用这个BDate来填充int类型的4个字段,每个季度生日数的计数。
感谢。
答案 0 :(得分:0)
数据设置:
create table test (
d1 varchar(10),
d2 datetime
);
insert into test (d1,d2) values ('2015-01-28','2015-01-28');
insert into test (d1,d2) values ('2015-02-13','2015-02-13');
insert into test (d1,d2) values ('2015-07-19','2015-07-19');
insert into test (d1,d2) values ('2015-11-04','2015-11-04');
如果您只想获得数据中每个季度的计数:
select DATEPART(QUARTER, d2), count(*)
from test
group by DATEPART(QUARTER, d2);
您可以使用d1或d2(SQL Server将正确处理varchar或datetime。)
如果您想要包括所有四个季度,即使它们不在您的数据中:
select qs.q, count(t.d2) as c
from (
SELECT 1 as q
UNION ALL
SELECT 2 as q
UNION ALL
SELECT 3 as q
UNION ALL
SELECT 4 as q) qs
left join test t
on qs.q = DATEPART(QUARTER, t.d2)
group by qs.q;
同样,你可以使用d1或d2,这没关系。 “qs”查询只获取数字1到4,然后外部连接到具有出生日期的表格。
答案 1 :(得分:0)
只要您的“BDate”列是日期时间,您就可以使用此查询轻松实现此目的:
SELECT DATEPART(QUARTER,BDATE), COUNT(*)
FROM TABLE1
GROUP BY DATEPART(QUARTER,BDATE)
ORDER BY DATEPART(QUARTER,BDATE) ASC
这是使用一些随机数据的工作小提琴:http://sqlfiddle.com/#!6/7734b/1