MySQLで2つのタイムスタンプの差を数秒で取得できるクエリを作成する方法はありますか、それともPHPで行う必要がありますか?もしそうなら、私はそれをどうやってやるのですか?
TIMEDIFF()
および TIME_TO_SEC()
関数を次のように使用できます。
SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
また、他の回答で UNIX_TIMESTAMP()
関数を @ Amber推奨 として使用することもできます。
SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') -
UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
TIMESTAMP
データ型を使用している場合、TIMESTAMP
の値は既にエポックからの秒数を表す整数として保存されているため、UNIX_TIMESTAMP()
ソリューションの方が少し高速になると思います( Source )。 docs の引用:
TIMESTAMP
カラムでUNIX_TIMESTAMP()
が使用されると、関数は暗黙的な「文字列からUnixタイムスタンプ」への変換なしで、内部タイムスタンプ値を直接返します。
TIMEDIFF()
TIME
のデータ型を返す であることに注意してください。TIME
値の範囲は「-838:59:59」から「838:59:59」までです(約34.96日)
「TIMESTAMPDIFF」はどうですか:
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
符号なしの差が必要な場合は、式の周りにABS()
を追加します。
または、TIMEDIFF(ts1, ts2)
を使用し、TIME_TO_SEC()
を使用して時間の結果を秒に変換することもできます。
TIMEDIFF()
ソリューションは、datetimes
が5日未満離れている場合にのみ機能することに注意してください。 TIMEDIFF()
はTIME
データ型を返し、TIMEの最大値は838:59:59時間(= 34,96日)