Introduction
MySQL comes with many built-in functions that allow you to manipulate data. These functions are grouped into categories – date functions, string functions, mathematic functions, and others.
Date functions give you numerous options on how to modify, calculate, and convert date, time, and datetime expressions in MySQL.
In this tutorial, you will learn about MySQL date and time functions and how they work, on practical examples.
Note: For more MySQL functions and commands, check out our MySQL Cheat Sheet.
Date-Related Functions
CURDATE OR CURRENT_DATE
Return the current date in the “YYY-MM-DD” or “YYYYMMDD” format with the CURDATE
OR CURRENT_DATE
command.
The basic syntax:
CURDATE();
For example, if you run:
SELECT CURDATE();
MySQL responds with the current date in the format:
2021-01-17
DATE
Return the date from a datetime expression using the DATE
command.
The basic syntax:
DATE(datetime);
For instance, if you run:
SELECT DATE('2021-01-17 10:12:16');
The output is:
2021-01-17
DATE_ADD or ADDDATE
Add a time/date value to a date expression with the DATE_ADD
or ADDDATE
function.
The basic syntax:
DATE_ADD(date, INTERVAL value unit);
Replace date with the date expression you want to add a time/date to. The value unit is the time/date you want to add. It needs to be expressed in a numeric value along with the unit of the value.
The unit can be:
- SECOND
- MINUTE
- HOUR
- DAY
- WEEK
- MONTH
- QUARTER
- YEAR
- SECOND_MICROSECOND
- MINUTE_MICROSECOND
- MINUTE_SECOND
- HOUR_MICROSECOND
- HOUR_SECOND
- HOUR_MINUTE
- DAY_MICROSECOND
- DAY_SECOND
- DAY_MINUTE
- DAY_HOUR
- YEAR_MONTH
For example, if you run:
SELECT DATE_ADD('2021-01-17 07:14:21', INTERVAL 20 MINUTE);
The output returns the result:
2021-01-17 07:34:21
DATE_FORMAT
Format a date using DATE_FORMAT
.
The basic syntax:
DATE_FORMAT(date, format);
The date is the date expression you want to reformat, while the format is a combination of the following specifiers:
For instance, if you run:
SELECT DATE_FORMAT('2021-01-17', '%W %M %Y');
The output displays the result:
Sunday January 2021
DATE_SUB or SUBDATE
Subtract a time/date value to a date expression with the DATE_SUB
or SUBDATE
function.
The basic syntax:
DATE_SUB(date, INTERVAL value unit);
Replace date with the date expression you want to subtract from. The value unit is the time/date you want to subtract. It needs to be expressed in numeric value along with the unit of the value.
Find a list of unit types in the DATE_ADD section.
For instance, if you run:
SELECT DATE_SUB('2021-01-17 07:14:21', INTERVAL 1 HOUR);
The output returns the result:
2021-01-17 06:14:21
DATEDIFF
Return the number of days between two date expressions with the DATEDIFF
function.
The basic syntax:
DATEDIFF(date1,date2);
For example:
SELECT DATEDIFF('2021-01-23','2021-01-14');
Returns the result:
9
EXTRACT
To extract part of a date/datetime expression, use the EXTRACT
function.
The basic syntax:
EXTRACT(unit FROM date);
In the command, you need to specify which unit you want to extract from the specified date.
Find a list of units you can use in the DATE_ADD description.
For instance, when you run:
SELECT EXTRACT(DAY FROM '2021-01-26');
You get the result:
26
GET_FORMAT
Return a format string (a combination of specifiers) as specified in the argument with GET_FORMAT
. This function is often used with DATE_FORMAT
.
The basic syntax:
GET_FORMAT(DATE/TIME/DATETIME,format)
Use this function with date, time, and datetime expressions.
The format can be:
- ‘EUR’
- ‘USA’
- ’JIS’
- ’ISO’
- ‘INTERNAL’
There is a finite number of results you can get using the GET_FORMAT
function. Below you will find a list of all the function calls and their results.
For instance, you could combine the function with DATE_FORMAT
, as in the following example:
SELECT DATE_FORMAT('2021-01-26', GET_FORMAT(DATE,'EUR'));
Where the result is:
26.01.2021
MAKEDATE
Return a date expression from a specified year and day of year using the MAKEDATE
function.
The basic syntax:
MAKEDATE(year,day);
For example, if you run:
SELECT MAKEDATE(2021,34);
The output shows the result:
2021-02-03
STR_TO_DATE
Format a date from a string with STR_TO_DATE
and return a date/datetime value.
The basic syntax:
STR_TO_DATE(string, format);
The string is what you want to reformat, while the format is a combination of specifiers that describe each element of the string.
You can find a list of specifiers and their meaning in the DATE_FORMAT section.
For instance, if you run:
SELECT STR_TO_DATE('January,25,2021', '%M %e %Y');
The output shows:
2021-01-25
SYSDATE
To return the current date and time in the format “YYYY-MM-DD hh:mm:ss” or “YYYYMMDDHHMMSS.uuuuuu”, use the SYSDATE
function.
The basic syntax:
SYSDATE();
You can add the fsp
argument to include fractional second precision (0-6). In that case, the syntax is SYSDATE(fsp);
.
The command shown below:
SELECT SYSDATE();
At this time gives the result:
2021-01-25 20:21:04
UTC_DATE
Return the current Coordinated Universal Time (UTC) date value in the “YYYY-MM-DD” or “YYYYMMDD” format with the UTC_DATE
function.
The basic syntax:
UTC_DATE();
For example, running the following command:
SELECT UTC_DATE();
Returns the current date which is:
2021-01-25
Time-Related Functions
ADDTIME
Add a time interval to a specified time/datetime expression using ADDTIME
.
The basic syntax:
ADDTIME(datetime, timevalue)
For instance, if you run:
SELECT ADDTIME('2021-01-25 08:13:11.000021', '3:14:32.000006');
You get the result:
2021-01-25 11:27:43.000027
CONVERT_TZ
Convert a time/datetime expression from one time zone to another using the ADDTIME
function.
The basic syntax:
CONVERT_TZ(datetime, from_timezone,to_timezone)
For example, when you run:
SELECT CONVERT_TZ('2021-01-25 10:12:00','+00:00','+10:00');
MySQL converts the specified datetime to +10:00 time zone:
2021-01-25 20:12:00
CURTIME or CURRENT_TIME
Return the current time using the CURTIME
or CURRENT_TIME
function. The result returns the time in the “hh:mm:ss” or “hhmmss” format.
The basic syntax:
CURTIME();
You can include fractional second precision (from 0 to 6) by adding the fsp
argument.
For example, the following command shows the current time with three fractional second precision:
CURTIME(3);
The output responds with the result:
15:19:07.340
HOUR
Return the hour of the specified time/datetime with the HOUR
function.
The basic syntax:
HOUR(datetime);
For instance, if you run:
SELECT HOUR('08:40:07');
The result is:
8
MAKETIME
Return a time expression from the specified hour, minute, and second values using the MAKETIME
function.
The basic syntax:
MAKETIME(hour, minute, second);
For example, you can run:
SELECT MAKETIME(09,25,00);
Where the output displays:
09:25:00
MICROSECOND
Return the microseconds of the specified time/datetime expression with MICROSECOND
.
The basic syntax:
MICROSECOND(datetime);
For example, you can run:
SELECT MICROSECOND('2021-01-21 10:23:44.000040');
Where the result is:
40
MINUTE
Return the minutes of the specified time/datetime expression using the MINUTE
function.
The basic syntax:
MINUTE(datetime);
For instance, if you run the command:
SELECT MINUTE('10:23:44');
The result is:
23
SEC_TO_TIME
Return a time value from a specified seconds value with the SEC_TO_TIME
function.
The basic syntax:
SEC_TO_TIME(seconds);
For instance, if you run the command:
SELECT SEC_TO_TIME(8897);
The output is:
02:28:17
SUBTIME
Subtract a time value from a time/datetime expression using the SUBTIME
function.
The basic syntax:
SUBTIME(datetime,timevalue);
For example, when you run:
SELECT SUBTIME('2021-01-21 21:24:00','2:20:1');
The output is:
2021-01-21 19:03:59
TIME
To return the time value from a datetime expression, use the TIME
function.
The basic syntax:
TIME(datetime);
For instance:
SELECT TIME('2021-01-22 13:38:10');
Gives the result:
13:38:10
TIME_FORMAT
Format a time value into the specified format with TIME_FORMAT
.
The basic syntax:
TIME_FORMAT(time,format);
The format is a combination of specifiers. You can find a list of all specifiers and their meaning in the description of the DATE_FORMAT function.
For example, by running:
SELECT TIME_FORMAT('13:45:10','%h %i %s %p');
You get the output:
01 45 10 PM
TIME_TO_SEC
To return the time value converted into seconds use the TIME_TO_SEC
.
The basic syntax:
TIME_TO_SEC(timevalue);
For instance, when you run:
SELECT TIME_TO_SEC('13:48:05');
The result is:
49685
TIMEDIFF
Calculate the difference between two time/datetime expressions with the TIMEDIFF
function. In this case, the result is always in time value.
The basic syntax:
TIMEDIFF(datetime1,datetime2);
For instance, when you run:
SELECT TIMEDIFF('2021-01-15 11:10:17','2021-01-05 11:10:16');
The output returns:
240:00:01
TO_SECONDS
To convert a date/datetime expression into seconds, use the function TO_SECONDS
. The result is the number of seconds between 0 and the specified date/datetime.
The basic syntax:
TO_SECONDS(datetime);
For example, if you run the command:
SELECT TO_SECONDS('2021-01-21 08:10:17');
The result is:
63778435817
UTC_TIME
Return the current UTC time value with UTC_TIME
. It returns the time value in the “HH:MM:SS” or “HHMMSS” format.
The basic syntax:
UTC_TIME();
For example, if you run:
SELECT UTC_TIME();
You get the result at this point of time is:
19:45:21
Note: Do you know how a traditional relational database compares to a document-oriented database management system? Learn more in this analysis of MySQL Vs. MongoDB.
Timestamp-Related Functions
CURRENT_TIMESTAMP or LOCALTIMESTAMP
To return the current date and time, use CURRENT_TIMESTAMP
or LOCALTIMESTAMP
. The result returns in the “YYYY-MM-DD HH-MM-SS” or “YYYYMMDDHHMMSS.uuuuuu” format.
The basic syntax:
CURRENT_TIMESTAMP();
For example, by running:
SELECT CURRENT_TIMESTAMP();
The current result is:
2021-01-25 19:53:55
FROM_UNIXTIME
Return a date/datetime expression from a timestamp in the Unix format with FROM_UNIXTIME
.
The basic syntax:
FROM_UNIXTIME(unix_timestamp);
If you run the command without an argument specifying the format, it returns the result in the “YYYY-MM-DD hh:mm:ss” or “YYYYMMDDhhmmss” format.
For instance, if you run:
SELECT FROM_UNIXTIME(1611231404);
You get the result:
2021-01-21 12:16:44
TIMESTAMP
To return a datetime expression from a date or datetime value, use the function TIMESTAMP
. If you add two arguments, the output returns the sum of the arguments.
The basic syntax:
TIMESTAMP(datetime);
TIMESTAMP(datetime,time);
For example, when you run the command:
SELECT TIMESTAMP('2021-01-13','30:50:00');
The output shows the result:
2021-01-14 06:50:00
TIMESTAMPADD
Add a time value to a date/datetime expression using the TIMESTAMPADD
function.
The basic syntax:
TIMESTAMPADD(unit,value,datetime);
The unit can be:
- FRAC_SECOND
- SECOND
- MINUTE
- HOUR
- DAY
- WEEK
- MONTH
- QUARTER
- YEAR
For instance, the following command adds 3 days to the specified date:
SELECT TIMESTAMPADD(DAY,3,'2021-01-18');
Therefore, the output shows:
2021-01-21
TIMESTAMPDIFF
To calculate the difference between two date/datetime expressions, use TIMESTAMPDIFF
. The function subtracts one datetime value from the other in the specified unit.
The basic syntax:
TIMESTAMPDIFF(unit,datetime1,datetime2);
You can find a list with different types of units, check out the list in the section above.
For example, you can calculate the difference between the following two dates in days:
SELECT TIMESTAMPDIFF(DAY,3,'2021-01-18');
Where the result is:
13
UNIX_TIMESTAMP
Return a Unix timestamp from a date/datetime expression with the UNIX_TIMESTAMP
function. The Unix timestamp represents seconds between the specified datetime and “1970-01-01 00:00:00” UTC.
The basic syntax:
UNIX_TIMESTAMP(datetime);
For instance, running the following command:
SELECT UNIX_TIMESTAMP('2021-01-25 17:33:00');
Gives the result:
1611595980
UTC_TIMESTAMP
Return the current UTC date and time value with UTC_TIMESTAMP
. It returns the datetime value in the “YYYY-MM-DD HH:MM:SS” or “YYYYMMDDHHMMSS.uuuuuu” format.
The basic syntax:
UTC_TIMESTAMP(datetime);
For example, the command:
SELECT UTC_TIMESTAMP();
Returns output in the same format as the one below:
2021-01-25 23:18:06
Day/Week/Month/Year-Related Functions
DAY
Return the day of a month from a specified date/datetime expression with the DAY
function.
The basic syntax:
DAY(datetime);
If you run the command below:
SELECT DAY('2021-01-26 12:32:00');
The output returns the result:
26
DAYNAME
Return the name of the weekday from a specified date/datetime expression using the DAYNAME
function.
The basic syntax:
DAYNAME(datetime);
For example, when you run the command:
SELECT DAYNAME('2021-01-26 12:32:00');
MySQL responds with the result:
Tuesday
DAYOFMONTH
Return the day of a month from a specified date/datetime expression with DAYOFMONTH
.
The basic syntax:
DAYOFMONTH(datetime);
For example, when you run the command:
SELECT DAYOFMONTH('2021-01-26 12:32:00');
MySQL responds with the result:
26
DAYOFWEEK
Return the day of week in numerical value from the specified date/datetime expression using DAYOFWEEK
.
The basic syntax:
DAYOFWEEK(datetime);
Running the command below:
SELECT DAYOFWEEK('2021-01-26 12:32:00');
Gives the response:
3
DAYOFYEAR
Return the day in a year from the specified date/datetime expression using the function DAYOFYEAR
.
The basic syntax:
DAYOFYEAR(datetime);
For instance, when you run the command:
SELECT DAYOFYEAR('2021-02-26 12:32:00');
The output gives the result:
57
FROM_DAYS
Return a date expression from a numeric representation of a day using the function FROM_DAYS
.
The basic syntax:
FROM_DAYS(number);
For example, running:
SELECT FROM_DAYS(738181);
The MySQL prompt responds with the result:
2021-01-26
LAST_DAY
Return the last day of the month from a specified date/datetime with the LAST_DAY
function.
The basic syntax:
LAST_DAY(date);
For instance, if you run the following command:
SELECT LAST_DAY('2021-01-26');
The output responds with:
31
MONTH
Return the month (in numeric value) from a specified date/datetime by using the MONTH
function.
The basic syntax:
MONTH(date);
For example, when you run:
SELECT MONTH('2021-01-26');
MySQL responds with:
1
MONTHNAME
Return the name of the month from a specified date/datetime with the MONTHNAME
function.
The basic syntax:
MONTHNAME(date);
If you run the command:
SELECT MONTH('2021-01-26');
You get the following response:
January
PERIOD_ADD
To add a specified number of months to a period, use the PERIOD_ADD
function.
The basic syntax:
PERIOD_ADD(period,number);
The period is defined in the format YYMM or YYYYMM, while the number is the number of months you want to add.
For example:
SELECT PERIOD_ADD(202101, 5);
Gives the result:
202106
PERIOD_DIFF
Return the number of months between two periods with PERIOD_DIFF
.
The basic syntax:
PERIOD_DIFF(period1,period2);
Each period should be in the format YYMM or YYYYMM.
For instance:
SELECT PERIOD_DIFF(202101, 202003);
Produces the result:
10
QUARTER
To return a quarter of a year from a specified date/datetime, use the function QUARTER
.
The basic syntax:
QUARTER(date);
For example, by running the command:
SELECT QUARTER('2021-01-26');
The output responds with:
1
TO_DAYS
Convert a date/datetime expression to a numeric representation of a day with TO_DAYS
.
The basic syntax:
TO_DAYS(datetime);
For instance, for the command:
SELECT TO_DAYS('2021-01-26');
The result is :
738181
WEEK
To return the week number from a specified date, use the function WEEK
.
The basic syntax:
WEEK(date);
You can also include the mode argument, in which case the syntax is WEEK(date,mode);
.
The mode argument specifies from which day the week starts. If there is no argument, it uses 0
mode by default.
The following table describes each mode:
For example, if you run:
SELECT WEEK('2021-01-26');
The output responds with:
4
WEEKDAY
Return the weekday from the specified date in numeric value with WEEKDAY
. Each number represents one of the weekdays – Monday is 0
, Tuesday is 1
, and so on.
The basic syntax:
WEEKDAY(date);
For example, running the following command:
SELECT WEEKDAY('2021-01-26');
Gives the response:
1
WEEKOFYEAR
To return the number of a week in a year, use the WEEKDAY
function.
The basic syntax:
WEEKOFYEAR(date);
For instance, when you run the command:
SELECT WEEKOFYEAR('2021-01-26');
The output shows the result:
3
YEAR
Return the year from the specified date with the YEAR
function.
The basic syntax:
YEAR(date);
If you run the following command:
SELECT YEAR('2021-01-26');
You get the result:
2021
YEARWEEK
Return the year and week number from the specified date using the YEARWEEK
function.
The basic syntax:
YEARWEEK(date);
You can add a mode
argument to the basic syntax to specify the day from which the week begins. To see a list of modes and their meaning, check out the table in the WEEK
function.
For example, when you run the command:
SELECT YEARWEEK('2021-01-26');
The output displays:
202104
Conclusion
This article should help you find all the MySQL date (and time) functions. With descriptions for each function and practical examples, you should be able to apply them with ease.
To have a better understanding of different data types, we suggest to check out our article on MySQL Data Types.