MySQL 8.0 リファレンスマニュアル


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

11.2.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 値への変換では、小数秒が考慮され、時間部分が丸められます。 たとえば、'1999-12-31 23:59:59.499''1999-12-31'になり、'1999-12-31 23:59:59.500''2000-01-01'になります。

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

TIME 値を他の時間型に変換する場合、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' になります。

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

date_col = CAST(datetime_col AS DATE)

TIME および DATETIME 値の数値形式への変換 (+0 の追加など) は、値に小数秒部分が含まれているかどうかによって異なります。 TIME(N) または DATETIME(N) は、N が 0 (または省略) の場合は整数に変換され、N が 0 より大きい場合は N 小数点を含む 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 |
+---------------------+----------------+--------------------+

関連キーワード:  変換, クラス, 日付, 部分, TIMESTAMP, 空間, リファレンス, 数値, CURTIME, マニュアル