按季度的日期

时间:2015-05-11 15:32:52

标签: sql sql-server date

我想在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个字段,每个季度生日数的计数。

感谢。

2 个答案:

答案 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