MySQL
では、TIME
値の取り出しと表示は
'HH:MM:SS'
形式
(時間の部分の値が大きい場合は
'HHH:MM:SS'
形式)
で行われます。TIME
値の範囲は、'-838:59:59'
から '838:59:59'
です。TIME
型は、一日のうちの時刻を表すことができるだけでなく
(24 時間以下)、経過時間や、2
つの出来事の間の時間を表すこともできるので
(24
時間よりも長い、またはマイナスのこともある)、時間を表す部分がとても長くなることがあります。
TIME
値は様々なフォーマットで指定することができます。
'D HH:MM:SS.fraction'
形式の文字列として。「柔軟」な構文として、'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
値の末尾のマイクロ秒の部分
.uuuuuu
は、項6.3.1. 「DATETIME
、DATE
、そして
TIMESTAMP
型」
に説明されているように、時間を表すほかの値の場合と同じ条件の下で使用できます。この中には、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'
は '00:11:12'
ではなく、'11:12:00'
を意味します。
デフォルトでは、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
モードを有効にしてください。Server SQL Modes
を参照してください。