12.7 Date and Time Functions

This section describes the functions that can be used to manipulate temporal values. See *note date-and-time-types::, for a description of the range of values each date and time type has and the valid formats in which values may be specified.

Date and Time Functions

Name Description

'ADDDATE()' Add time values (intervals) to a date value

'ADDTIME()' Add time

'CONVERT_TZ()' Convert from one time zone to another

'CURDATE()' Return the current date

'CURRENT_DATE()', Synonyms for CURDATE() 'CURRENT_DATE'

'CURRENT_TIME()', Synonyms for CURTIME() 'CURRENT_TIME'

'CURRENT_TIMESTAMP()',Synonyms for NOW() 'CURRENT_TIMESTAMP'

'CURTIME()' Return the current time

'DATE()' Extract the date part of a date or datetime expression

'DATE_ADD()' Add time values (intervals) to a date value

'DATE_FORMAT()' Format date as specified

'DATE_SUB()' Subtract a time value (interval) from a date

'DATEDIFF()' Subtract two dates

'DAY()' Synonym for DAYOFMONTH()

'DAYNAME()' Return the name of the weekday

'DAYOFMONTH()' Return the day of the month (0-31)

'DAYOFWEEK()' Return the weekday index of the argument

'DAYOFYEAR()' Return the day of the year (1-366)

'EXTRACT()' Extract part of a date

'FROM_DAYS()' Convert a day number to a date

'FROM_UNIXTIME()' Format Unix timestamp as a date

'GET_FORMAT()' Return a date format string

'HOUR()' Extract the hour

'LAST_DAY' Return the last day of the month for the argument

'LOCALTIME()', Synonym for NOW() 'LOCALTIME'

'LOCALTIMESTAMP', Synonym for NOW() 'LOCALTIMESTAMP()'

'MAKEDATE()' Create a date from the year and day of year

'MAKETIME()' Create time from hour, minute, second

'MICROSECOND()' Return the microseconds from argument

'MINUTE()' Return the minute from the argument

'MONTH()' Return the month from the date passed

'MONTHNAME()' Return the name of the month

'NOW()' Return the current date and time

'PERIOD_ADD()' Add a period to a year-month

'PERIOD_DIFF()' Return the number of months between periods

'QUARTER()' Return the quarter from a date argument

'SEC_TO_TIME()' Converts seconds to 'hh:mm:ss' format

'SECOND()' Return the second (0-59)

'STR_TO_DATE()' Convert a string to a date

'SUBDATE()' Synonym for DATE_SUB() when invoked with three arguments

'SUBTIME()' Subtract times

'SYSDATE()' Return the time at which the function executes

'TIME()' Extract the time portion of the expression passed

'TIME_FORMAT()' Format as time

'TIME_TO_SEC()' Return the argument converted to seconds

'TIMEDIFF()' Subtract time

'TIMESTAMP()' With a single argument, this function returns the date or datetime expression; with two arguments, the sum of the arguments

'TIMESTAMPADD()' Add an interval to a datetime expression

'TIMESTAMPDIFF()' Return the difference of two datetime expressions, using the units specified

'TO_DAYS()' Return the date argument converted to days

'TO_SECONDS()' Return the date or datetime argument converted to seconds since Year 0

'UNIX_TIMESTAMP()' Return a Unix timestamp

'UTC_DATE()' Return the current UTC date

'UTC_TIME()' Return the current UTC time

'UTC_TIMESTAMP()' Return the current UTC date and time

'WEEK()' Return the week number

'WEEKDAY()' Return the weekday index

'WEEKOFYEAR()' Return the calendar week of the date (1-53)

'YEAR()' Return the year

'YEARWEEK()' Return the year and week

Here is an example that uses date functions. The following query selects all rows with a DATE_COL value from within the last 30 days:

 mysql> SELECT SOMETHING FROM TBL_NAME
     -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= DATE_COL;

The query also selects rows with dates that lie in the future.

Functions that expect date values usually accept datetime values and ignore the time part. Functions that expect time values usually accept datetime values and ignore the date part.

Functions that return the current date or time each are evaluated only once per query at the start of query execution. This means that multiple references to a function such as 'NOW()' within a single query always produce the same result. (For our purposes, a single query also includes a call to a stored program (stored routine, trigger, or event) and all subprograms called by that program.) This principle also applies to 'CURDATE()', 'CURTIME()', 'UTC_DATE()', 'UTC_TIME()', 'UTC_TIMESTAMP()', and to any of their synonyms.

The 'CURRENT_TIMESTAMP()', 'CURRENT_TIME()', 'CURRENT_DATE()', and 'FROM_UNIXTIME()' functions return values in the current session time zone, which is available as the session value of the 'time_zone' system variable. In addition, 'UNIX_TIMESTAMP()' assumes that its argument is a datetime value in the session time zone. See *note time-zone-support::.

Some date functions can be used with 'zero' dates or incomplete dates such as ''2001-11-00'', whereas others cannot. Functions that extract parts of dates typically work with incomplete dates and thus can return 0 when you might otherwise expect a nonzero value. For example:

 mysql> SELECT DAYOFMONTH('2001-11-00'), MONTH('2005-00-00');
         -> 0, 0

Other functions expect complete dates and return 'NULL' for incomplete dates. These include functions that perform date arithmetic or that map parts of dates to names. For example:

 mysql> SELECT DATE_ADD('2006-05-00',INTERVAL 1 DAY);
         -> NULL
 mysql> SELECT DAYNAME('2006-05-00');
         -> NULL

Several functions are strict when passed a 'DATE()' function value as their argument and reject incomplete dates with a day part of zero: 'CONVERT_TZ()', 'DATE_ADD()', 'DATE_SUB()', 'DAYOFYEAR()', 'TIMESTAMPDIFF()', 'TO_DAYS()', 'TO_SECONDS()', 'WEEK()', 'WEEKDAY()', 'WEEKOFYEAR()', 'YEARWEEK()'.

Fractional seconds for 'TIME', 'DATETIME', and 'TIMESTAMP' values are supported, with up to microsecond precision. Functions that take temporal arguments accept values with fractional seconds. Return values from temporal functions include fractional seconds as appropriate.

 File: manual.info.tmp, Node: string-functions, Next: fulltext-search, Prev: date-and-time-functions, Up: functions