MySQL:2つのタイムスタンプの違いを秒単位で取得する方法


97

MySQLでクエリを作成して、2つのタイムスタンプの差を秒単位で取得できる方法はありますか、それともPHPでそれを行う必要がありますか?もしそうなら、私はそれをどうやってやりますか?

回答:


176

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)

@Amberが他の回答で提案されているように、UNIX_TIMESTAMP()関数を使用することもできます。

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データ型を使用している場合UNIX_TIMESTAMP()TIMESTAMP値はエポック(ソースからの秒数を表す整数として既に格納されているため、ソリューションは少し速くなると思います)。ドキュメントの引用:

いつ UNIX_TIMESTAMP()に使用されるTIMESTAMPカラム、関数は、暗黙の「ストリングからのUnixタイムスタンプ」変換で、直接内部タイムスタンプ値を返します。

TIMEDIFF() データ型TIME返すことに注意してください。TIME値の範囲は「-838:59:59」から「838:59:59」です(約34.96日)


11
TIMESTAMPDIFFを使用することもできます。これは、単一の関数でそれを行いunitますSECOND。パラメーターをに設定するだけです。
Mike

性能説明は+1。もっと時間がかかると思ったので、UNIX_TIMESTAMP()を使用していませんでした。
elcool

51

「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


日付列がYYYY-MM-DD以外の別の形式である場合、これを実行してみてくださいstr_to_date(date_column, '%m/%d/%Y')。フォーマットを修正する必要がある列のTIMESTAMPDIFF関数内で。
greatKing 2017年

これは正しい値を返すのに対して、TIME_TO_SECmaxが最大になるので、私にとってより良い答え3020399です。
ビリーノア2018年

21
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)

符号なしの差分が必要な場合は、 ABS()は、式の前後します。

または、を使用TIMEDIFF(ts1, ts2)して時間の結果を秒に変換することもできますTIME_TO_SEC()


11

ことを注意TIMEDIFF()するときソリューションはのみ動作しdatetimesている未満35日離れて! データ型をTIMEDIFF()返し、TIMETIME最大値は838:59:59時間(= 34,96日)です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.