Date and time values can be represented in several formats, such
as quoted strings or as numbers, depending on the exact type of
the value and other factors. For example, in contexts where
MySQL expects a date, it interprets any of
'2015-07-21', '20150721',
and 20150721 as a date.
This section describes the acceptable formats for date and time literals. For more information about the temporal data types, such as the range of permitted values, consult these sections:
Standard SQL and ODBC Date and Time Literals. Standard SQL permits temporal literals to be specified using a type keyword and a string. The space between the keyword and string is optional.
DATE 'str' TIME 'str' TIMESTAMP 'str'
MySQL recognizes those constructions and also the corresponding ODBC syntax:
{ d 'str' }
{ t 'str' }
{ ts 'str' }
However, MySQL ignores the type keyword and each of the
preceding constructions produces the string value
', with a type
of str'VARCHAR.
String and Numeric Literals in Date and Time Context.
MySQL recognizes DATE values in
these formats:
As a string in either 'YYYY-MM-DD' or
'YY-MM-DD' format. A
“relaxed” syntax is permitted: Any punctuation
character may be used as the delimiter between date parts.
For example, '2012-12-31',
'2012/12/31',
'2012^12^31', and
'2012@12@31' are equivalent.
As a string with no delimiters in either
'YYYYMMDD' or 'YYMMDD'
format, provided that the string makes sense as a date. For
example, '20070523' and
'070523' are interpreted as
'2007-05-23', but
'071332' is illegal (it has nonsensical
month and day parts) and becomes
'0000-00-00'.
As a number in either YYYYMMDD or
YYMMDD format, provided that the number
makes sense as a date. For example,
19830905 and 830905
are interpreted as '1983-09-05'.
MySQL recognizes DATETIME and
TIMESTAMP values in these
formats:
As a string in either 'YYYY-MM-DD
HH:MM:SS' or 'YY-MM-DD
HH:MM:SS' format. A “relaxed” syntax
is permitted here, too: Any punctuation character may be
used as the delimiter between date parts or time parts. For
example, '2012-12-31 11:30:45',
'2012^12^31 11+30+45',
'2012/12/31 11*30*45', and
'2012@12@31 11^30^45' are equivalent.
The date and time parts can be separated by
T rather than a space. For example,
'2012-12-31 11:30:45'
'2012-12-31T11:30:45' are equivalent.
As a string with no delimiters in either
'YYYYMMDDHHMMSS' or
'YYMMDDHHMMSS' format, provided that the
string makes sense as a date. For example,
'20070523091528' and
'070523091528' are interpreted as
'2007-05-23 09:15:28', but
'071122129015' is illegal (it has a
nonsensical minute part) and becomes '0000-00-00
00:00:00'.
As a number in either YYYYMMDDHHMMSS or
YYMMDDHHMMSS format, provided that the
number makes sense as a date. For example,
19830905132800 and
830905132800 are interpreted as
'1983-09-05 13:28:00'.
A DATETIME or
TIMESTAMP value can include a
trailing fractional seconds part in up to microseconds (6
digits) precision. Although this fractional part is recognized,
it is discarded from values stored into
DATETIME or
TIMESTAMP columns. For
information about fractional seconds support in MySQL, see
Section 11.3.6, “Fractional Seconds in Time Values”.
Dates containing two-digit year values are ambiguous because the century is unknown. MySQL interprets two-digit year values using these rules:
Year values in the range 70-99 are
converted to 1970-1999.
Year values in the range 00-69 are
converted to 2000-2069.
See also Section 11.3.8, “Two-Digit Years in Dates”.
For values specified as strings that include date part
delimiters, it is unnecessary to specify two digits for month or
day values that are less than 10.
'2015-6-9' is the same as
'2015-06-09'. Similarly, for values specified
as strings that include time part delimiters, it is unnecessary
to specify two digits for hour, minute, or second values that
are less than 10. '2015-10-30
1:2:3' is the same as '2015-10-30
01:02:03'.
Values specified as numbers should be 6, 8, 12, or 14 digits
long. If a number is 8 or 14 digits long, it is assumed to be in
YYYYMMDD or YYYYMMDDHHMMSS
format and that the year is given by the first 4 digits. If the
number is 6 or 12 digits long, it is assumed to be in
YYMMDD or YYMMDDHHMMSS
format and that the year is given by the first 2 digits. Numbers
that are not one of these lengths are interpreted as though
padded with leading zeros to the closest length.
Values specified as nondelimited strings are interpreted
according their length. For a string 8 or 14 characters long,
the year is assumed to be given by the first 4 characters.
Otherwise, the year is assumed to be given by the first 2
characters. The string is interpreted from left to right to find
year, month, day, hour, minute, and second values, for as many
parts as are present in the string. This means you should not
use strings that have fewer than 6 characters. For example, if
you specify '9903', thinking that represents
March, 1999, MySQL converts it to the “zero” date
value. This occurs because the year and month values are
99 and 03, but the day
part is completely missing. However, you can explicitly specify
a value of zero to represent missing month or day parts. For
example, to insert the value '1999-03-00',
use '990300'.
MySQL recognizes TIME values in
these formats:
As a string in 'D HH:MM:SS' format. You
can also use one of the following “relaxed”
syntaxes: 'HH:MM:SS',
'HH:MM', 'D HH:MM',
'D HH', or 'SS'. Here
D represents days and can have a value
from 0 to 34.
As a string with no delimiters in
'HHMMSS' format, provided that it makes
sense as a time. For example, '101112' is
understood as '10:11:12', but
'109712' is illegal (it has a nonsensical
minute part) and becomes '00:00:00'.
As a number in HHMMSS format, provided
that it makes sense as a time. For example,
101112 is understood as
'10:11:12'. The following alternative
formats are also understood: SS,
MMSS, or HHMMSS.
A trailing fractional seconds part is recognized in the
'D HH:MM:SS.fraction',
'HH:MM:SS.fraction',
'HHMMSS.fraction', and
HHMMSS.fraction time formats, where
fraction is the fractional part in up to
microseconds (6 digits) precision. Although this fractional part
is recognized, it is discarded from values stored into
TIME columns. For information
about fractional seconds support in MySQL, see
Section 11.3.6, “Fractional Seconds in Time Values”.
For TIME values specified as
strings that include a time part delimiter, it is unnecessary to
specify two digits for hours, minutes, or seconds values that
are less than 10. '8:3:2'
is the same as '08:03:02'.