Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  日付と時間型間での変換

11.3.7 日付と時間型間での変換

ある程度まで、ある時間型から別の時間型に値を変換できます。ただし、値の変更や情報の損失が生じることがあります。どの場合でも、時間型間の変換は、変換される型で有効な値の範囲に依存します。たとえば、DATEDATETIME、および TIMESTAMP 値はすべて、同じセットの形式を使用して指定できますが、すべての型で値の範囲が同じであるわけではありません。TIMESTAMP 値は、1970 UTC より古い値にしたり、'2038-01-19 03:14:07' UTC より新しい値にしたりできません。つまり、'1968-01-01' などの日付は、DATE または DATETIME 値としては有効ですが、TIMESTAMP 値としては有効ではなく、0 に変換されます。

DATE 値の変換:

  • DATE 値には時間情報が含まれないので、DATETIME または TIMESTAMP 値に変換すると、'00:00:00' の時間部分が追加されます。

  • TIME 値への変換は有用ではありません。結果は '00:00:00' になります。

DATETIME および TIMESTAMP 値の変換:

  • DATE 型には時間情報が含まれないので、DATE 値に変換すると時間部分が破棄されます。

  • TIME 型には日付情報が含まれないので、TIME 値に変換すると日付部分が破棄されます。

TIME 値のほかの時間型への変換はバージョンによって異なります。

  • MySQL 5.6.4 以降では、CURRENT_DATE() の値が日付部分に使用されます。TIME は (時間ではなく) 経過時間として解釈され、日付に追加されます。これは、時間値が '00:00:00' から '23:59:59' の範囲から外れている場合に、結果の日付部分が現在の日付と異なることを意味します。

    現在の日付が '2012-01-01' であるとします。'12:00:00''24:00:00''-12:00:00'TIME 値は、DATETIME または TIMESTAMP 値に変換されると、それぞれ '2012-01-01 12:00:00''2012-01-02 00:00:00''2011-12-31 12:00:00' になります。

    TIME から DATE への変換も同様ですが、結果から時間部分が破棄され、それぞれ '2012-01-01''2012-01-02''2011-12-31' になります。

  • 5.6.4 より前の MySQL では、時間の文字列を日付または日付時間として解析することによって、時間値を日付または日付時間値に変換します。これが役立つ可能性はありません。たとえば、'23:12:31' は、日付として解釈されると '2023-12-31' になります。日付として有効でない時間は '0000-00-00' または NULL になります。

明示的な変換を使用して暗黙的な変換をオーバーライドできます。たとえば、DATE および DATETIME 値の比較で、DATE 値は、'00:00:00' の時間部分を追加することにより、強制的に DATETIME 型に変更されます。代わりに DATETIME 値の時間部分を無視して比較を実行するには、次の方法で CAST() 関数を使用します。

date_col = CAST(datetime_col AS DATE)

TIME および DATETIME 値の数値形式への (+0 の追加などによる) 変換は、次のように行われます。

  • MySQL 5.6.4 以降では、TIME(N) または DATETIME(N) は、N が 0 (または省略) の場合は整数に、N が正の数の場合は N の 10 進数を含む DECIMAL 値に変換されます。

    mysql> SELECT CURTIME(), CURTIME()+0, CURTIME(3)+0;
    +-----------+-------------+--------------+
    | CURTIME() | CURTIME()+0 | CURTIME(3)+0 |
    +-----------+-------------+--------------+
    | 09:28:00  |       92800 |    92800.887 |
    +-----------+-------------+--------------+
    mysql> SELECT NOW(), NOW()+0, NOW(3)+0;
    +---------------------+----------------+--------------------+
    | NOW()               | NOW()+0        | NOW(3)+0           |
    +---------------------+----------------+--------------------+
    | 2012-08-15 09:28:00 | 20120815092800 | 20120815092800.889 |
    +---------------------+----------------+--------------------+
  • MySQL 5.6.4 より前では、変換の結果は、マイクロ秒部分が .000000 である倍精度値になります。

    mysql> SELECT CURTIME(), CURTIME()+0;
    +-----------+--------------+
    | CURTIME() | CURTIME()+0  |
    +-----------+--------------+
    | 09:28:00  | 92800.000000 |
    +-----------+--------------+
    mysql> SELECT NOW(), NOW()+0;
    +---------------------+-----------------------+
    | NOW()               | NOW()+0               |
    +---------------------+-----------------------+
    | 2012-08-15 09:28:00 | 20120815092800.000000 |
    +---------------------+-----------------------+

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.