MariaDBには、日付/時刻の値からさまざまな日付と時刻の部分を抽出できるようにするいくつかの関数があります。これらを使用して、必要に応じて各日付/時刻コンポーネントを独自の列に分割できます。
以下は、MariaDBの時間値から時間、分、秒を抽出する4つの方法です。ボーナスとして、マイクロ秒も含まれます。
HOUR()
、MINUTE()
、SECOND()
およびMICROSECOND()
機能
HOUR()
、MINUTE()
、およびSECOND()
関数は、日付または日時の値からそれぞれ時間、分、および秒を抽出します。
また、より高い精度で作業している場合は、MICROSECOND()
を使用できます。 マイクロ秒の部分を返す関数。
これらの関数を使用して、各時間コンポーネントを独自の列に返す例を次に示します。
SELECT
HOUR('10:45:30.123456') AS "Hours",
MINUTE('10:45:30.123456') AS "Minutes",
SECOND('10:45:30.123456') AS "Seconds",
MICROSECOND('10:45:30.123456') AS "Microseconds";
結果:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
値の範囲は'-838:59:59.999999'
です。 to '838:59:59.999999'
。
TIME
値は負になることもあります。このような場合でも、戻り値は正です。
負の時間値は次のとおりです:
SELECT
HOUR('-10:45:30.123456') AS "Hours",
MINUTE('-10:45:30.123456') AS "Minutes",
SECOND('-10:45:30.123456') AS "Seconds",
MICROSECOND('-10:45:30.123456') AS "Microseconds";
結果:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
EXTRACT()
機能
EXTRACT()
関数を使用すると、日付/時刻の値から指定された単位を抽出できます。したがって、これを使用して、時間値から時間、分、秒、およびマイクロ秒を抽出できます。
例:
SELECT
EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";
結果:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME_FORMAT()
機能
TIME_FORMAT()
関数を使用すると、フォーマット文字列に基づいて時間値をフォーマットできます。 format文字列は、時刻のフォーマット方法を指定します。
したがって、この関数を使用して、さまざまな時間部分を個別に返すことができます。
例:
SELECT
TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
結果:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
すべての時間コンポーネントを別々に返すこともできますが、同じ列にあります。
これが私の言いたいことの例です:
SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');
結果:
+-----------------------------------------------+ | TIME_FORMAT('10:07:30.123456', '%H %i %s %f') | +-----------------------------------------------+ | 10 07 30 123456 | +-----------------------------------------------+
TIME_FORMAT()
関数は、DATE_FORMAT()
で使用できるフォーマット文字列のサブセットを受け入れます 働き。
時間部分には、いくつかの可能な形式指定子があります。上記で使用したフォーマット指定子は、00
の間に2桁の時間を含む時間を返します。 および23
。 DATE_FORMAT()
で使用できるフォーマット文字列/指定子の完全なリストについては、MariaDBフォーマット文字列を参照してください。 。 TIME_FORMAT()
関数は、時間、分、および秒/サブ秒のフォーマット指定子のみを受け入れます。その他の形式指定子は、null
になります。 または0
返送されます。
DATE_FORMAT()
機能
DATE_FORMAT()
関数を使用すると、フォーマット文字列に基づいて日付または日時の値をフォーマットできます。フォーマット文字列は、日付/時刻のフォーマット方法を指定します。
したがって、TIME_FORMAT()
で使用したものと同じ形式指定子を使用できます。 前の例の関数。ただし、DATE_FORMAT()
TIME
を受け入れません 値なので、DATETIME
を渡す必要があります 値。
SELECT
DATE_FORMAT('2023-01-01 10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";
結果:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
だけを渡す 値はこの関数では機能しません:
SELECT
DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
結果:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | NULL | NULL | NULL | NULL | +-------+---------+---------+--------------+ 1 row in set, 4 warnings (0.003 sec)
警告を見てみましょう:
SHOW WARNINGS;
結果:
+---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | +---------+------+---------------------------------------------+