DATE_FORMAT()

Description

Formats the date value according to the format string. If either argument is NULL, the function returns NULL.

DATE_FORMAT() returns a string with a character set and collation given by character_set_connection and collation_connection so that it can return month and weekday names containing non-ASCII characters.

Syntax

  1. > DATE_FORMAT(date,format)

Arguments

ArgumentsDescription
dateRequired. The date to be formatted.
formatRequired. The format to use. Can be one or a combination of the following values as the below table:

Format Specifier

Info

The specifiers shown in the following table may be used in the format string. The % character is required before format specifier characters. The specifiers apply to other functions as well as UNIX_TIMESTAMP().

SpecifierDescription
%aAbbreviated weekday name (Sun..Sat)
%bAbbreviated month name (Jan..Dec)
%cMonth, numeric (0..12)
%DDay of the month with English suffix (0th, 1st, 2nd, 3rd, …)
%dDay of the month, numeric (00..31)
%eDay of the month, numeric (0..31)
%fMicroseconds (000000..999999)
%HHour (00..23)
%hHour (01..12)
%IHour (01..12)
%iMinutes, numeric (00..59)
%jDay of year (001..366)
%kHour (0..23)
%lHour (1..12)
%MMonth name (January..December)
%mMonth, numeric (00..12)
%pAM or PM
%rTime, 12-hour (hh:mm:ss followed by AM or PM)
%SSeconds (00..59)
%sSeconds (00..59)
%TTime, 24-hour (hh:mm:ss)
%UWeek (00..53), where Sunday is the first day of the week; WEEK() mode 0
%uWeek (00..53), where Monday is the first day of the week; WEEK() mode 1
%VWeek (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X
%vWeek (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x
%WWeekday name (Sunday..Saturday)
%wDay of the week (0=Sunday..6=Saturday)
%XYear for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%xYear for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%YYear, numeric, four digits
%yYear, numeric (two digits)
%%A literal % character
%xx, for any “x” not listed above

Examples

  1. mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
  2. +--------------------------------------------+
  3. | date_format(2009-10-04 22:23:00, %W %M %Y) |
  4. +--------------------------------------------+
  5. | Sunday October 2009 |
  6. +--------------------------------------------+
  7. 1 row in set (0.01 sec)
  8. mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
  9. +--------------------------------------------+
  10. | date_format(2007-10-04 22:23:00, %H:%i:%s) |
  11. +--------------------------------------------+
  12. | 22:23:00 |
  13. +--------------------------------------------+
  14. 1 row in set (0.02 sec)
  15. mysql> SELECT Date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
  16. +--------------------------------------------------------+
  17. | date_format(1900-10-04 22:23:00, %D %y %a %d %m %b %j) |
  18. +--------------------------------------------------------+
  19. | 4th 00 Thu 04 10 Oct 277 |
  20. +--------------------------------------------------------+
  21. 1 row in set (0.01 sec)
  22. mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
  23. +--------------------------------------------------------+
  24. | date_format(1997-10-04 22:23:00, %H %k %I %r %T %S %w) |
  25. +--------------------------------------------------------+
  26. | 22 22 10 10:23:00 PM 22:23:00 00 6 |
  27. +--------------------------------------------------------+
  28. 1 row in set (0.01 sec)
  29. mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
  30. +--------------------------------+
  31. | date_format(1999-01-01, %X %V) |
  32. +--------------------------------+
  33. | 1998 52 |
  34. +--------------------------------+
  35. 1 row in set (0.00 sec)
  1. CREATE TABLE t2 (f1 DATETIME);
  2. INSERT INTO t2 (f1) VALUES ('2005-01-01');
  3. INSERT INTO t2 (f1) VALUES ('2005-02-01');
  4. mysql> SELECT Date_format(f1, "%m") AS d1,
  5. Date_format(f1, "%m") AS d2
  6. FROM t2
  7. ORDER BY Date_format(f1, "%m");
  8. +------+------+
  9. | d1 | d2 |
  10. +------+------+
  11. | 01 | 01 |
  12. | 02 | 02 |
  13. +------+------+
  14. 2 rows in set (0.00 sec)
  1. CREATE TABLE t5 (a int, b date);
  2. INSERT INTO t5
  3. VALUES (1,
  4. '2000-02-05'),
  5. (2,
  6. '2000-10-08'),
  7. (3,
  8. '2005-01-03'),
  9. (4,
  10. '2007-09-01'),
  11. (5,
  12. '2022-01-01');
  13. mysql> SELECT * FROM t5
  14. WHERE b = Date_format('20000205', '%Y-%m-%d');
  15. +------+------------+
  16. | a | b |
  17. +------+------------+
  18. | 1 | 2000-02-05 |
  19. +------+------------+
  20. 1 row in set (0.01 sec)
  21. mysql> SELECT * FROM t5
  22. WHERE b != Date_format('20000205', '%Y-%m-%d');
  23. +------+------------+
  24. | a | b |
  25. +------+------------+
  26. | 2 | 2000-10-08 |
  27. | 3 | 2005-01-03 |
  28. | 4 | 2007-09-01 |
  29. | 5 | 2022-01-01 |
  30. +------+------------+
  31. 4 rows in set (0.01 sec)
  32. mysql> SELECT DATE_FORMAT("2009-01-01",'%W %d %M %Y') as valid_date;
  33. +--------------------------+
  34. | valid_date |
  35. +--------------------------+
  36. | Thursday 01 January 2009 |
  37. +--------------------------+
  38. 1 row in set (0.00 sec)

Constraints

The date type supports only yyyy-mm-dd and yyyymmdd for now.