MySQL - YEARWEEK() Function


The DATE, DATETIME and TIMESTAMP datatypes in MySQL are used to store the date, date and time, time stamp

values respectively. Where a time stamp is a numerical value representing the number of milliseconds from '1970-01-01 00:00:01' UTC (epoch) to the specified time. MySQL provides a set of functions to manipulate these values.

The MYSQL YEARWEEK() function is used to retrieve the calendar week and year of the given date. This function returns a numerical value which contains the year and week.

In addition to the date value this function accepts another optional parameter representing the mode using which you can specify whether the week should start on Sunday or Monday.

Following are the various possible values of the mode and the respective implications −

  • Mode value 0 − If the mode value is 0 first week of the day will be Sunday week values range is from 0 to 53 and the first week will be the week with a Sunday.

  • Mode value 1 − If the mode value is 1 first week of the day will be Monday week values range is from 0 to 53 and the first week will be the week with more than 4 days.

  • Mode value 2 − If the mode value is 2 first week of the day will be Sunday week values range is from 1 to 53 and the first week will be the week with a Sunday.

  • Mode value 3 − If the mode value is 3 first week of the day will be Monday week values range is from 1 to 53 and the first week will be the week with more than 4 days.

  • Mode value 4 − If the mode value is 4 first week of the day will be Sunday week values range is from 0 to 53 and the first week will be the week with more than 4 days.

  • Mode value 5 − If the mode value is 5 first week of the day will be Monday week values range is from 0 to 53 and the first week will be the week with a Monday.

  • Mode value 6 − If the mode value is 6 first week of the day will be Sunday week values range is from 1 to 53 and the first week will be the week with more than 4 days.

  • Mode value 7 − If the mode value is 7 first week of the day will be Monday week values range is from 1 to 53 and the first week will be the week with a Monday.

Syntax

Following is the syntax of the above function –

YEARWEEK(date), YEARWEEK(date, mode);

Example 1

Following example demonstrates the usage of the YEARWEEK() function –

mysql> SELECT YEARWEEK('2019-05-25');
+------------------------+
| YEARWEEK('2019-05-25') |
+------------------------+
| 201920                 |
+------------------------+
1 row in set (0.00 sec)

Example 2

Following is another example of this function –

mysql> SELECT YEARWEEK('1998-11-21');
+------------------------+
| YEARWEEK('1998-11-21') |
+------------------------+
| 199846                 |
+------------------------+
1 row in set (0.00 sec)

Example 3

Let us see the week of the date from above example for all the mode (optional parameter) values –

mysql> SELECT YEARWEEK('2021-01-03', 1);
+---------------------------+
| YEARWEEK('2021-01-03', 1) |
+---------------------------+
| 202053                    |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2021-01-03', 2);
+---------------------------+
| YEARWEEK('2021-01-03', 2) |
+---------------------------+
| 202101                    |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2021-01-03', 3);
+---------------------------+
| YEARWEEK('2021-01-03', 3) |
+---------------------------+
| 202053                    |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2021-01-03', 4);
+---------------------------+
| YEARWEEK('2021-01-03', 4) |
+---------------------------+
| 202101                    |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2021-01-03', 5);
+---------------------------+
| YEARWEEK('2021-01-03', 5) |
+---------------------------+
| 202052                    |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2021-01-03', 6);
+---------------------------+
| YEARWEEK('2021-01-03', 6) |
+---------------------------+
| 202101                    |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2021-01-03', 7);
+---------------------------+
| YEARWEEK('2021-01-03', 7) |
+---------------------------+
| 202052                    |
+---------------------------+
1 row in set (0.00 sec)

Example 4

If the day part in the given date is 0 this function returns NULL —

mysql> SELECT YEARWEEK('2017-00-00');
+------------------------+
| YEARWEEK('2017-00-00') |
+------------------------+
|                   NULL |
+------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> SELECT YEARWEEK('1789-02-00');
+------------------------+
| YEARWEEK('1789-02-00') |
+------------------------+
|                   NULL |
+------------------------+
1 row in set, 1 warning (0.00 sec)

Example 5

If you pass an empty string or a non-string value as an argument this function returns NULL.–

mysql> SELECT YEARWEEK('');
+--------------+
| YEARWEEK('') |
+--------------+
|         NULL |
+--------------+
1 row in set, 1 warning (0.00 sec)

mysql> SELECT YEARWEEK(1990-11-11);
+----------------------+
| YEARWEEK(1990-11-11) |
+----------------------+
|                 NULL |
+----------------------+
1 row in set, 1 warning (0.00 sec)

Example 6

We can also pass the date-time expression as an argument to this function –

mysql> SELECT YEARWEEK('2015-09-05 09:40:45.2300');
+--------------------------------------+
| YEARWEEK('2015-09-05 09:40:45.2300') |
+--------------------------------------+
|                               201535 |
+--------------------------------------+
1 row in set (0.00 sec)

Example 7

In the following example we are retrieving year and week of the current date —

mysql> SELECT YEARWEEK(CURDATE());
+---------------------+
| YEARWEEK(CURDATE()) |
+---------------------+
|              202128 |
+---------------------+
1 row in set (0.00 sec)

Example 8

In the following example we are retrieving the year and week number from the current timestamp —

mysql> SELECT YEARWEEK(CURRENT_TIMESTAMP());
+-------------------------------+
| YEARWEEK(CURRENT_TIMESTAMP()) |
+-------------------------------+
|                        202128 |
+-------------------------------+
1 row in set (0.00 sec)

Example 9

You can also pass the column name as an argument to this function. Let us create a table with name MyPlayers in MySQL database using CREATE statement as shown below –

mysql> CREATE TABLE MyPlayers(
	ID INT,
	First_Name VARCHAR(255),
	Last_Name VARCHAR(255),
	Date_Of_Birth date,
	Place_Of_Birth VARCHAR(255),
	Country VARCHAR(255),
	PRIMARY KEY (ID)
);
Now, we will insert 7 records in MyPlayers table using INSERT statements:
mysql> insert into MyPlayers values(1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India');
mysql> insert into MyPlayers values(2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica');
mysql> insert into MyPlayers values(3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka');
mysql> insert into MyPlayers values(4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India');
mysql> insert into MyPlayers values(5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India');
mysql> insert into MyPlayers values(6, 'Ravindra', 'Jadeja', DATE('1988-12-06'), 'Nagpur', 'India');
mysql> insert into MyPlayers values(7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England');

Following query extracts the year and week of all the entities of the Date_Of_Birth column of the table MyPlayers —

mysql> SELECT First_Name, Last_Name, Date_Of_Birth, Country,
YEARWEEK(Date_Of_Birth) FROM MyPlayers;
+------------+------------+---------------+-------------+-------------------------+
| First_Name | Last_Name  | Date_Of_Birth | Country     | YEARWEEK(Date_Of_Birth) |
+------------+------------+---------------+-------------+-------------------------+
| Shikhar    | Dhawan     | 1981-12-05    | India       |                  198148 |
| Jonathan   | Trott      | 1981-04-22    | SouthAfrica |                  198116 |
| Kumara     | Sangakkara | 1977-10-27    | Srilanka    |                  197743 |
| Virat      | Kohli      | 1988-11-05    | India       |                  198844 |
| Rohit      | Sharma     | 1987-04-30    | India       |                  198717 |
| Ravindra   | Jadeja     | 1988-12-06    | India       |                  198849 |
| James      | Anderson   | 1982-06-30    | England     |                  198226 |
+------------+------------+---------------+-------------+-------------------------+
7 rows in set (0.00 sec)

Example 10

Suppose we have created a table named dispatches_data with 5 records in it using the following queries –

mysql> CREATE TABLE dispatches_data(
	ProductName VARCHAR(255),
	CustomerName VARCHAR(255),
	DispatchTimeStamp timestamp,
	Price INT,
	Location VARCHAR(255)
);
insert into dispatches_data values('Key-Board', 'Raja', TIMESTAMP('2019-05-04', '15:02:45'), 7000, 'Hyderabad');
insert into dispatches_data values('Earphones', 'Roja', TIMESTAMP('2019-06-26', '14:13:12'), 2000, 'Vishakhapatnam');
insert into dispatches_data values('Mouse', 'Puja', TIMESTAMP('2019-12-07', '07:50:37'), 3000, 'Vijayawada');
insert into dispatches_data values('Mobile', 'Vanaja' , TIMESTAMP ('2018-03-21', '16:00:45'), 9000, 'Chennai');
insert into dispatches_data values('Headset', 'Jalaja' , TIMESTAMP('2018-12-30', '10:49:27'), 6000, 'Goa');

Following query retrieves the year and week from the DispatchTimeStamp column —

mysql> SELECT ProductName, CustomerName, DispatchTimeStamp, Price,
YEARWEEK(DispatchTimeStamp) FROM dispatches_data;
+-------------+--------------+---------------------+-------+-----------------------------+
| ProductName | CustomerName | DispatchTimeStamp   | Price | YEARWEEK(DispatchTimeStamp) |
+-------------+--------------+---------------------+-------+-----------------------------+
| Key-Board   | Raja         | 2019-05-04 15:02:45 | 7000  |                      201917 |
| Earphones   | Roja         | 2019-06-26 14:13:12 | 2000  |                      201925 |
| Mouse       | Puja         | 2019-12-07 07:50:37 | 3000  |                      201948 |
| Mobile      | Vanaja       | 2018-03-21 16:00:45 | 9000  |                      201811 |
| Headset     | Jalaja       | 2018-12-30 10:49:27 | 6000  |                      201852 |
+-------------+--------------+---------------------+-------+-----------------------------+
5 rows in set (0.00 sec)

Example 11

Suppose we have created a table named SubscriberDetails with 5 records in it using the following queries –

mysql> CREATE TABLE SubscriberDetails (
	SubscriberName VARCHAR(255),
	PackageName VARCHAR(255),
	SubscriptionTimeStamp timestamp
);
insert into SubscriberDetails values('Raja', 'Premium', TimeStamp('2020-10-21 20:53:49'));
insert into SubscriberDetails values('Roja', 'Basic', TimeStamp('2020-11-26 10:13:19'));
insert into SubscriberDetails values('Puja', 'Moderate', TimeStamp('2021-03-07 05:43:20'));
insert into SubscriberDetails values('Vanaja', 'Basic', TimeStamp('2021-02-21 16:36:39'));
insert into SubscriberDetails values('Jalaja', 'Premium', TimeStamp('2021-01-30 12:45:45'));

Following query retrieves and displays the year and week of subscription for all the users —

mysql> SELECT SubscriberName, PackageName, SubscriptionTimeStamp,
YEARWEEK(SubscriptionTimeStamp) FROM SubscriberDetails;
+----------------+-------------+-----------------------+---------------------------------+
| SubscriberName | PackageName | SubscriptionTimeStamp | YEARWEEK(SubscriptionTimeStamp) |
+----------------+-------------+-----------------------+---------------------------------+
| Ram            | Premium     | 2020-10-21 20:53:49   |                          202042 |
| Rahman         | Basic       | 2020-11-26 10:13:19   |                          202047 |
| Robert         | Moderate    | 2021-03-07 05:43:20   |                          202110 |
| Radha          | Basic       | 2021-02-21 16:36:39   |                          202108 |
| Rajiya         | Premium     | 2021-01-30 12:45:45   |                          202104 |
+----------------+-------------+-----------------------+---------------------------------+
5 rows in set (0.00 sec)
mysql-date-time-functions.htm
Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements