MySQLは TIME
値を
'HH:MM:SS'
フォーマットで検索、表示します。(または長時間値を表すには
'HHH:MM:SS'
フォーマット)TIME
値の範囲は
'-838:59:59'
から
'838:59:59'
です。TIME
タイプは、一日のうちの時刻を表す事ができるだけでなく(24時間以下)、経過時間や、二つの出来事の間の時間を表す事もできるので(24時間よりも長い、またはマイナスの事も有る)、時間を表す部分がとても長くなる事があります。
TIME
値は様々なフォーマットで指定する事ができます。
'D HH:MM:SS.fraction'
フォーマットの文字列として次のうちの
「柔軟な」
構文の1つを利用する事もできます。'HH:MM:SS.fraction'
、'HH:MM:SS'
、
'HH:MM'
、'D
HH:MM:SS'
、'D
HH:MM'
、'D
HH'
、または
'SS'
。ここでは、D
は日を表し、0から34の値を持つ事ができます。MySQLは端数部分を格納しない事を覚えておいて下さい。
時刻を表す、'HHMMSS'
フォーマットで区切り文字を利用しない文字列として例えば、'101112'
は '10:11:12'
として理解されますが、'109712'
は不正データとなり(意味を成さない分の部分を持つ為)、'00:00:00'
となります。
時刻を表す、'HHMMSS'
フォーマットの数字として例えば、101112
は '10:11:12'
として理解されます。以下のフォーマットもまた理解されます。SS
、MMSS
、HHMMSS
、HHMMSS.fraction
MySQLは端数部分を格納しない事を覚えておいて下さい。
CURRENT_TIME
のように
TIME
コンテキストの中で許容される値を返す関数の結果として
時刻部分の区切り文字を含む文字列として指定された
TIME
値には、時、分、または秒の値に
10
以下の2桁の値を指定する必要はありません。'8:3:2'
は '08:03:02'
と同じです。
TIME
カラムに省略された値を指定する際には注意してください。MySQLは、コロンが付いていない値は、その値の一番右の二桁が秒を表していると解釈します。(MySQLは
TIME
値を、一日の内の時刻ではなく、経過時間として解釈します。)例えば、'1112'
と 1112
は、'11:12:00'
(11時12分過ぎ)を意味するように感じますが、MySQLはそれを
'00:11:12'
(11分12秒)と解釈します。同じように、'12'
と 12
は'00:00:12'
という意味になります。コロンが付いた
TIME
値は反対に、必ず一日の内の時刻として扱われます。それは、'11:12'
が '11:12:00'
を表し、'00:11:12'
では無いという事になります。
デフォルトでは、TIME
範囲外であるが正当である値は、その値の終点にクリップされます。例えば、'-850:00:00'
と '850:00:00'
は
'-838:59:59'
と
'838:59:59'
に変換されます。不正な TIME
値は
'00:00:00'
に変換されます。'00:00:00'
自体は正当な TIME
値なので、テーブルに格納された
'00:00:00'
の値から、元の値が
'00:00:00'
値で指定されたのか、不当な値だったのかを知る方法は無いという事を覚えておいて下さい。
不正な TIME
値をもう少し厳しく扱うためには、エラーが発生するようにストリクトSQLモードを有効にしてください。項4.2.6. 「SQL モード」を参照してください。