最接近的等价物是extract。需要各种intervals。
select create_date, extract(year from create_date)
from tbl_trade;
+---------------------+--------------------------------+
| create_date | extract(year from create_date) |
+---------------------+--------------------------------+
| 2019-01-02 00:00:00 | 2019 |
| 2019-01-02 00:00:00 | 2019 |
+---------------------+--------------------------------+
至于更改星期和年份的定义,可以通过various modes to week。
-- Mode 7: Week starts on Monday. Week 1 is the first with a Monday.
select create_date, week(create_date, 7) from tbl_trade;
+---------------------+----------------------+
| create_date | week(create_date, 7) |
+---------------------+----------------------+
| 2019-01-02 00:00:00 | 53 |
| 2019-01-02 00:00:00 | 53 |
+---------------------+----------------------+
或者通过设置default_week_format 来影响所有日期函数。
set default_week_format = 7;
select create_date, extract(week from create_date) from tbl_trade;
+---------------------+--------------------------------+
| create_date | extract(week from create_date) |
+---------------------+--------------------------------+
| 2019-01-02 00:00:00 | 53 |
| 2019-01-02 00:00:00 | 53 |
+---------------------+--------------------------------+
对于精细控制,有date_format。
-- %v is mode 3. First DOW is Monday. First week is has 4 days or more.
select create_date, date_format(create_date, '%W week %v') from tbl_trade;
+---------------------+----------------------------------------+
| create_date | date_format(create_date, '%W week %v') |
+---------------------+----------------------------------------+
| 2019-01-02 00:00:00 | Wednesday week 01 |
| 2019-01-02 00:00:00 | Wednesday week 01 |
+---------------------+----------------------------------------+