Calendar quarters start in January. Financial years often start in another month, so the quarter number and reporting year must be shifted. These examples retain the original April–March and October–September cases.
| Date | Financial year / quarter |
|---|---|
| 2015-March-04 | 2014-Q4 |
| 2015-March-09 | 2014-Q4 |
| 2015-April-11 | 2015-Q1 |
| 2015-April-24 | 2015-Q1 |
| 2015-September-10 | 2015-Q2 |
| 2015-September-14 | 2015-Q2 |
| 2015-October-09 | 2015-Q3 |
| 2015-October-16 | 2015-Q3 |
| 2016-February-11 | 2015-Q4 |
| 2016-February-18 | 2015-Q4 |
| 2016-June-09 | 2016-Q1 |
| 2016-June-24 | 2016-Q1 |
| 2016-July-14 | 2016-Q2 |
| 2016-July-27 | 2016-Q2 |
| 2016-October-13 | 2016-Q3 |
| 2016-October-21 | 2016-Q3 |
| 2017-January-03 | 2016-Q4 |
| 2017-January-12 | 2016-Q4 |
| 2017-May-10 | 2017-Q1 |
| 2017-May-19 | 2017-Q1 |
| 2017-August-17 | 2017-Q2 |
| 2017-August-29 | 2017-Q2 |
| 2017-December-07 | 2017-Q3 |
| 2017-December-22 | 2017-Q3 |
| 2018-March-02 | 2017-Q4 |
| 2018-March-12 | 2017-Q4 |
SELECT DATE_FORMAT(payment_dt, '%Y-%M-%d') AS report_date,
CASE WHEN QUARTER(payment_dt) = 1
THEN CONCAT(YEAR(payment_dt) - 1, '-Q', QUARTER(payment_dt) + 3)
ELSE CONCAT(YEAR(payment_dt), '-Q', QUARTER(payment_dt) - 1)
END AS financial_quarter
FROM plus2_bills;
| Date | Financial year / quarter |
|---|---|
| 2015-March-04 | 2014-Q2 |
| 2015-March-09 | 2014-Q2 |
| 2015-April-11 | 2014-Q3 |
| 2015-April-24 | 2014-Q3 |
| 2015-September-10 | 2014-Q4 |
| 2015-September-14 | 2014-Q4 |
| 2015-October-09 | 2015-Q1 |
| 2015-October-16 | 2015-Q1 |
| 2016-February-11 | 2015-Q2 |
| 2016-February-18 | 2015-Q2 |
| 2016-June-09 | 2015-Q3 |
| 2016-June-24 | 2015-Q3 |
| 2016-July-14 | 2015-Q4 |
| 2016-July-27 | 2015-Q4 |
| 2016-October-13 | 2016-Q1 |
| 2016-October-21 | 2016-Q1 |
| 2017-January-03 | 2016-Q2 |
| 2017-January-12 | 2016-Q2 |
| 2017-May-10 | 2016-Q3 |
| 2017-May-19 | 2016-Q3 |
| 2017-August-17 | 2016-Q4 |
| 2017-August-29 | 2016-Q4 |
| 2017-December-07 | 2017-Q1 |
| 2017-December-22 | 2017-Q1 |
| 2018-March-02 | 2017-Q2 |
| 2018-March-12 | 2017-Q2 |
SELECT DATE_FORMAT(payment_dt, '%Y-%M-%d') AS report_date,
CASE WHEN QUARTER(payment_dt) != 4
THEN CONCAT(YEAR(payment_dt) - 1, '-Q', QUARTER(payment_dt) + 1)
ELSE CONCAT(YEAR(payment_dt), '-Q', QUARTER(payment_dt) - 3)
END AS financial_quarter
FROM plus2_bills;
The same quarter logic can display labels such as 2015-16 - Q1.
| Date | Financial year / quarter |
|---|---|
| 2015-March-04 | 2014-15 - Q4 |
| 2015-March-09 | 2014-15 - Q4 |
| 2015-April-11 | 2015-16 - Q1 |
| 2015-April-24 | 2015-16 - Q1 |
| 2015-September-10 | 2015-16 - Q2 |
| 2015-September-14 | 2015-16 - Q2 |
| 2015-October-09 | 2015-16 - Q3 |
| 2015-October-16 | 2015-16 - Q3 |
| 2016-February-11 | 2015-16 - Q4 |
| 2016-February-18 | 2015-16 - Q4 |
| 2016-June-09 | 2016-17 - Q1 |
| 2016-June-24 | 2016-17 - Q1 |
| 2016-July-14 | 2016-17 - Q2 |
| 2016-July-27 | 2016-17 - Q2 |
| 2016-October-13 | 2016-17 - Q3 |
| 2016-October-21 | 2016-17 - Q3 |
| 2017-January-03 | 2016-17 - Q4 |
| 2017-January-12 | 2016-17 - Q4 |
| 2017-May-10 | 2017-18 - Q1 |
| 2017-May-19 | 2017-18 - Q1 |
| 2017-August-17 | 2017-18 - Q2 |
| 2017-August-29 | 2017-18 - Q2 |
| 2017-December-07 | 2017-18 - Q3 |
| 2017-December-22 | 2017-18 - Q3 |
| 2018-March-02 | 2017-18 - Q4 |
| 2018-March-12 | 2017-18 - Q4 |
SELECT DATE_FORMAT(payment_dt, '%Y-%M-%d') AS report_date,
CASE WHEN QUARTER(payment_dt) = 1
THEN CONCAT(YEAR(payment_dt) - 1, '-', DATE_FORMAT(payment_dt, '%y'), ' - Q', QUARTER(payment_dt) + 3)
ELSE CONCAT(YEAR(payment_dt), '-', LPAD((YEAR(payment_dt) + 1) MOD 100, 2, '0'), ' - Q', QUARTER(payment_dt) - 1)
END AS financial_quarter
FROM plus2_bills;
| Date | Financial year / quarter |
|---|---|
| 2015-March-04 | 2014-15 - Q2 |
| 2015-March-09 | 2014-15 - Q2 |
| 2015-April-11 | 2014-15 - Q3 |
| 2015-April-24 | 2014-15 - Q3 |
| 2015-September-10 | 2014-15 - Q4 |
| 2015-September-14 | 2014-15 - Q4 |
| 2015-October-09 | 2015-16 - Q1 |
| 2015-October-16 | 2015-16 - Q1 |
| 2016-February-11 | 2015-16 - Q2 |
| 2016-February-18 | 2015-16 - Q2 |
| 2016-June-09 | 2015-16 - Q3 |
| 2016-June-24 | 2015-16 - Q3 |
| 2016-July-14 | 2015-16 - Q4 |
| 2016-July-27 | 2015-16 - Q4 |
| 2016-October-13 | 2016-17 - Q1 |
| 2016-October-21 | 2016-17 - Q1 |
| 2017-January-03 | 2016-17 - Q2 |
| 2017-January-12 | 2016-17 - Q2 |
| 2017-May-10 | 2016-17 - Q3 |
| 2017-May-19 | 2016-17 - Q3 |
| 2017-August-17 | 2016-17 - Q4 |
| 2017-August-29 | 2016-17 - Q4 |
| 2017-December-07 | 2017-18 - Q1 |
| 2017-December-22 | 2017-18 - Q1 |
| 2018-March-02 | 2017-18 - Q2 |
| 2018-March-12 | 2017-18 - Q2 |
SELECT DATE_FORMAT(payment_dt, '%Y-%M-%d') AS report_date,
CASE WHEN QUARTER(payment_dt) != 4
THEN CONCAT(YEAR(payment_dt) - 1, '-', DATE_FORMAT(payment_dt, '%y'), ' - Q', QUARTER(payment_dt) + 1)
ELSE CONCAT(YEAR(payment_dt), '-', LPAD((YEAR(payment_dt) + 1) MOD 100, 2, '0'), ' - Q', QUARTER(payment_dt) - 3)
END AS financial_quarter
FROM plus2_bills;
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.