MySQLにTIMEDIFF()
があることに気づいたかもしれません。 関数とSUBTIME()
働き。また、多くの場合、どちらも同じ結果を返すことに気付いたかもしれません。では、これら2つの機能の違いは何か疑問に思われるかもしれません。
調べてみましょう。
構文
まず、各関数の構文を見てみましょう。
SUBTIME()
SUBTIME(expr1,expr2)
ここで、expr1
は時刻または日時の式であり、expr2
時間表現です。
TIMEDIFF()
TIMEDIFF(expr1,expr2)
ここで、expr1
およびexpr2
は時刻または日付と時刻の式ですが、両方とも同じタイプである必要があります。
違い
違いは次のとおりです:
-
SUBTIME()
を使用する場合 、2番目の引数は時間式である必要があります 。 -
TIMEDIFF()
を使用する場合 2番目の引数は、時刻または日時式のいずれかですが、いずれの場合も、最初の式と同じタイプである必要があります 。
例1-両方の引数は「時間」値です
これが両方の関数の比較です。両方の引数は時間値です。
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
結果:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
予想どおり、どちらの関数も同じ結果を返します。
例2–両方の引数は「日時」の値です
これは両方の関数の比較です。両方の引数は日時の値です。
SELECT TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
結果:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
この場合、SUBTIME()
2番目の引数が時刻の値ではなかった(日時の値だった)ため、null値を返しました。
例3–最初の引数は「datetime」、2番目は「time」
ここで、最初の引数は日時の値です。 2番目の引数は時間値です。
SELECT TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';
結果:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
この場合、TIMEDIFF()
両方の引数が異なるタイプであったため、null値を返しました。
例4–最初の引数は「時間」、2番目の引数は「日時」
そしてここで、それを交換します。最初の引数は時間値です。 2番目の引数は日時の値です。
SELECT TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
結果:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
この場合:
-
TIMEDIFF()
両方の引数が異なるタイプであったため、null値を返しました。
SUBTIME()
2番目の引数の時間値のみを受け入れるため、null値を返しました。