日付値と時間値は、値の正確型とほかの要因に応じて、引用符付きの文字列や数値など、複数の形式で表現できます。 たとえば、MySQL が日付を予想するコンテキストでは、'2015-07-21'
、'20150721'
、20150721
のいずれも日付と解釈します。
このセクションでは日付リテラルと時間リテラルの許容される形式について説明します。 許可される値の範囲など、時間データ型の詳細は、セクション11.2「日時データ型」 を参照してください。
標準 SQL と ODBC の日付および時間リテラル. 標準 SQL では、型キーワードと文字列を使用して時間リテラルを指定する必要があります。 キーワードと文字列の間の空白はオプションです。
DATE 'str'
TIME 'str'
TIMESTAMP 'str'
MySQL は認識しますが、標準 SQL とは異なり、type キーワードは必要ありません。 標準に準拠するアプリケーションには、時間リテラルの type キーワードを含める必要があります。
MySQL では、標準 SQL 構文に対応する ODBC 構文も認識されます:
{ d 'str' }
{ t 'str' }
{ ts 'str' }
MySQL では、型キーワードと ODBC コンストラクトを使用して、DATE
、TIME
および DATETIME
の値がそれぞれ生成されます。後続の小数秒部分 (指定されている場合) も含まれます。 DATETIME
には、標準 SQL の TIMESTAMP
型により密接に対応する範囲があり、ここには 0001
から 9999
の年範囲が含まれるので、TIMESTAMP
構文は、MySQL で DATETIME
値を生成します。 (MySQL の TIMESTAMP
年範囲は 1970
から 2038
です。)
日時コンテキストでの文字列リテラルと数値リテラル.
MySQL は次の形式で DATE
値を認識します。
'
またはYYYY-MM-DD
''
形式の文字列として。 「緩やかな」構文が許可されます。どの句読点文字でも、日付部分間の区切り文字として使用できます。 たとえば、YY-MM-DD
''2012-12-31'
、'2012/12/31'
、'2012^12^31'
、および'2012@12@31'
は同等です。文字列が日付として意味を持つ場合は、
'
またはYYYYMMDD
''
形式のデリミタのない文字列として。 たとえば、YYMMDD
''20070523'
と'070523'
は'2007-05-23'
として解釈されますが、'071332'
は正しくないため (月と日の部分が不適切)、'0000-00-00'
になります。YYYYMMDD
またはYYMMDD
形式の数値 (日付として適切なもの) として。 たとえば、19830905
と830905
は'1983-09-05'
として解釈されます。
MySQL は次の形式で DATETIME
および TIMESTAMP
値を認識します。
-
'
またはYYYY-MM-DD hh:mm:ss
''
形式の文字列として。 「緩やかな」構文はここでも許可されます。どの句読点文字でも、日付部分または時間部分の間の区切り文字として使用できます。 たとえば、YY-MM-DD hh:mm:ss
''2012-12-31 11:30:45'
、'2012^12^31 11+30+45'
、'2012/12/31 11*30*45'
、および'2012@12@31 11^30^45'
は同等です。日付および時間の部分と小数秒部分との間の区切り文字として認識される唯一の文字が小数点です。
日付部分と時間部分は、空白ではなく
T
で区切ることもできます。 たとえば、'2012-12-31 11:30:45'
と'2012-12-31T11:30:45'
は同等です。 文字列が日付として意味を持つ場合は、
'
またはYYYYMMDDhhmmss
''
形式のデリミタのない文字列として。 たとえば、YYMMDDhhmmss
''20070523091528'
と'070523091528'
は'2007-05-23 09:15:28'
として解釈されますが、'071122129015'
は正しくないため (分の部分が不適切)、'0000-00-00 00:00:00'
になります。数値が日付として意味を持つ場合は、
YYYYMMDDhhmmss
またはYYMMDDhhmmss
形式の数値として。 たとえば、19830905132800
と830905132800
は'1983-09-05 13:28:00'
として解釈されます。
DATETIME
または TIMESTAMP
値には、マイクロ秒 (6 桁) までの精度の後続の小数秒部分を含めることができます。 小数部は、常に時間の残りの部分から小数点で区分する必要があります。これ以外の小数秒区切り文字は認識されません。 MySQL の小数秒のサポートの詳細は、セクション11.2.6「時間値での小数秒」を参照してください。
2 桁の年を含む日付の値は、世紀が不明なためあいまいです。 MySQL は次のルールを使用して 2 桁の年の値を解釈します。
70-99
の範囲内の年の値は1970-1999
になります。00-69
の範囲内の年の値は2000-2069
になります。
セクション11.2.8「日付の 2 桁の年」も参照してください。
日付部分の区切り文字を含む文字列として指定される値の場合、10
未満の月または日の値に 2 桁を指定する必要はありません。'2015-6-9'
は '2015-06-09'
と同じです。 同様に、時間部分の区切り文字を含む文字列として指定される値の場合、10
未満の時、分、または秒の値に 2 桁を指定する必要はありません。'2015-10-30 1:2:3'
は '2015-10-30 01:02:03'
と同じです。
数値として指定する値は、6、8、12、14 のいずれかの桁数にするようにしてください。 数値の長さが 8 桁または 14 桁の場合、YYYYMMDD
または YYYYMMDDhhmmss
形式であるとみなされ、年は最初の 4 桁で指定されます。 数値の長さが 6 桁または 12 桁の場合、YYMMDD
または YYMMDDhhmmss
形式であるとみなされ、年は最初の 2 桁で指定されます。 これらの長さではない数字は、いちばん近い長さまで先行ゼロで埋められているかのように解釈されます。
区切り文字がない文字列として指定された値は、その長さに従って解釈されます。 8 または 14 文字の長さの文字列の場合、年は最初の 4 文字で表されていると見なされます。 そうでなければ、年は最初の 2 文字で表されていると見なされます。 文字列は、その文字列に存在するだけの部分について、左から右に順番に、年、月、日、時、分、秒として解釈されます。 これは、6 文字より少ない文字列は利用してはいけないということを意味します。 たとえば、1999 年 3 月を表すと考えて '9903'
を指定しても、MySQL は「ゼロ」日付値に変換します。 これは、年および月の値は 99
と 03
であるけれども、日の部分が完全に欠落しているために起こります。 ただし、明示的に値ゼロを指定することによって、欠落している月や日の部分を表すことができます。 たとえば、'1999-03-00'
の値を挿入するには、'990300'
を使用します。
MySQL は次の形式で TIME
値を認識します。
'D hh:mm:ss'
形式の文字列として。 次の「リラックス」構文のいずれかを使用することもできます:'hh:mm:ss'
,'hh:mm'
,'D hh:mm'
,'D hh'
または'ss'
。 この場合、D
は日を表し、0 から 34 の値を指定できます。'hhmmss'
形式のデリミタのない文字列として (時間として意味がある場合)。 たとえば、'101112'
は'10:11:12'
として認識されますが、'109712'
は正しくないため (分の部分が不適切)、'00:00:00'
になります。時間として意味がある場合は、
hhmmss
形式の数値として。 たとえば、101112
は'10:11:12'
として認識されます。 次の代替形式も理解されます:ss
、mmss
またはhhmmss
。
後続の小数秒部分は、'D hh:mm:ss.fraction'
, 'hh:mm:ss.fraction'
, 'hhmmss.fraction'
および hhmmss.fraction
の時間書式で認識されます。ここで、fraction
はマイクロ秒 (6 桁) までの精度の小数部です。 小数部は、常に時間の残りの部分から小数点で区分する必要があります。これ以外の小数秒区切り文字は認識されません。 MySQL の小数秒のサポートの詳細は、セクション11.2.6「時間値での小数秒」を参照してください。
時間部分の区切り文字を含む文字列として指定される TIME
値の場合、10
未満の時、分、秒の値に 2 桁を指定する必要はありません。'8:3:2'
は '08:03:02'
と同じです。