如何基于给定的日期列创建自定义季度 sql sql 服务器



我正在使用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上查看

最新更新