我正在使用Microsoft sql server。我想根据给定的日期列创建自定义季度列。此日期列表示该特定年份中季度的第一天。 困难是我的日期列的时间跨度为 3 年。每年都有不同的季度开始日期。下面是我的日期列的示例。非常感谢!
Date
2011-02-28 00:00:00:000 ---first date of q1 in 2011
2011-05-31 00:00:00:000 ---first date of q2 in 2011
2011-08-31 00:00:00:000 ---first date of q3 in 2011
2011-12-01 00:00:00:000 ---first date of q4 in 2011
2012-02-29 00:00:00:000 ---first date of q1 in 2012
2012-05-30 00:00:00:000 ---first date of q2 in 2012
2012-08-30 00:00:00:000 ---first date of q3 in 2012
2012-11-30 00:00:00:000 ---first date of q4 in 2012
2013-02-28 00:00:00:000 ---first date of q1 in 2013
2013-05-30 00:00:00:000 ---first date of q2 in 2013
2013-08-30 00:00:00:000 ---first date of q3 in 2013
2013-11-30 00:00:00:000 ---first date of q4 in 2013
预期结果将是:
Date QuarterColumn
2011-02-28 00:00:00:000 q1
2011-05-31 00:00:00:000 q2
2011-08-31 00:00:00:000 q3
2011-12-01 00:00:00:000 q4
2012-02-29 00:00:00:000 q1
2012-05-30 00:00:00:000 q2
2012-08-30 00:00:00:000 q3
2012-11-30 00:00:00:000 q4
2013-02-28 00:00:00:000 q1
2013-05-30 00:00:00:000 q2
2013-08-30 00:00:00:000 q3
2013-11-30 00:00:00:000 q4
您需要创建查找表
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=816974201a48ed0bdf6782c121e1f8db
然后,您将使用此表并将其连接到使用(start_q end_q(之间,以获得自定义的季度。
对于 SQL SERVER
CREATE TABLE datetable ( [id] VARCHAR(11), [Date] datetime ); INSERT INTO datetable ([id], [Date]) VALUES ('1', '2011-02-28 00:00:00:000'), ('2', '2011-05-31 00:00:00:000'), ('3', '2011-08-31 00:00:00:000'), ('4', '2011-12-01 00:00:00:000'), ('5', '2012-02-29 00:00:00:000'), ('6', '2012-05-30 00:00:00:000'), ('7', '2012-08-30 00:00:00:000'), ('8', '2012-11-30 00:00:00:000'), ('9', '2013-02-28 00:00:00:000'), ('10', '2013-05-30 00:00:00:000'), ('11','2013-08-30 00:00:00:000'), (12,'2013-11-30 00:00:00:000'); GO
受影响的 12 行
SELECT CONCAT('Q',DATEPART(quarter,[Date]), ' ',DATEPART(year,[Date])) FROM datetable ORDER BY [Date] GO
|(无列名( | |:--------------- | |2011 年第 1 季度 | |2011年第二季度 | |2011 年第 3 季度 | |2011年第四季度 | |2012 年第一季度 | |2012 年第 2 季度 | |2012 年第 3 季度 | |2012 年第 4 季度 | |2013 年第一季度 | |2013年第二季度 | |2013 年第 3 季度 | |2013 年第 4 季度 |
db<>小提琴在这里
对于 mysql
架构 (MySQL v5.6(
CREATE TABLE datetable (
`id` VARCHAR(11),
`Date` datetime
);
INSERT INTO datetable
(`id`, `Date`)
VALUES
('1', '2011-02-28 00:00:00:000'),
('2', '2011-05-31 00:00:00:000'),
('3', '2011-08-31 00:00:00:000'),
('4', '2011-12-01 00:00:00:000'),
('5', '2012-02-29 00:00:00:000'),
('6', '2012-05-30 00:00:00:000'),
('7', '2012-08-30 00:00:00:000'),
('8', '2012-11-30 00:00:00:000'),
('9', '2013-02-28 00:00:00:000'),
('10', '2013-05-30 00:00:00:000'),
('11','2013-08-30 00:00:00:000'),
(12,'2013-11-30 00:00:00:000');
查询 #1
SELECT CONCAT('Q',QUARTER(`Date`), ' ',YEAR(`Date`))
FROM
datetable
ORDER BY `Date`;
| CONCAT('Q',QUARTER(`Date`), ' ',YEAR(`Date`)) |
| --------------------------------------------- |
| Q1 2011 |
| Q2 2011 |
| Q3 2011 |
| Q4 2011 |
| Q1 2012 |
| Q2 2012 |
| Q3 2012 |
| Q4 2012 |
| Q1 2013 |
| Q2 2013 |
| Q3 2013 |
| Q4 2013 |
在DB Fiddle上查看