2017-06-26 15 views
0

私はsqlを書いて、現在の更新時刻と最終更新時刻の差分を計算しました。まず、CURRENT_TIMESTAMP - updated_timeを使用して、結果が時間単位秒で正しいように見えます。しかし、それは安定していない、時にはその結果は、正しいものよりずっと大きくなりました。そして、私はTIMESTAMPDIFF(SECOND, updated_time, CURRENT_TIMESTAMP)に変更しました、すべてがOKです。私の質問は、トウの表現の違いは何ですか?はCURRENT_TIMESTAMPです - updated_timeはTIMESTAMPDIFF(SECOND、updated_time、CURRENT_TIMESTAMP)と同じです

+0

あなたはそれ以上の質問がありますか、何かがよりクリアにしたいですか? – tukan

+1

私はmysqlがSQLエンジンで "CURRENT_TIMESTAMP - updated_time"をどのように説明しているかについて詳しく知りたいと思っています。 – Dongqing

+0

私は、今それは明らかです参照してください!私は正しい答えを見直し、例を追加しました。 – tukan

答えて

2

CURRENT_TIMESTAMP()またはCURRENT_TIMESTAMPは、現在の時刻を示すNOW()の同義語です。

編集2:
あなたの追加のコメントの後、私はあなたが何を求めているのか理解しました。 (私は最初の編集を削除しました)、これは不完全でやや間違っていました。

質問は、「CURRENT_TIMESTAMP - updated_timeの内部動作を説明する」です。

CURRENT_TIMESTAMPは、「YYYY-MM-DD HH:MM:SS」またはYYYYMMDDHHMMSS形式で日付と時刻を返すことができます。 文脈に基づいて文字列または数値のいずれかを返すことができるのはおそらく混乱します。 ここには、 - (マイナス)演算子があるため、数値コンテキストがあります。

`String context` 
SELECT CURRENT_TIMESTAMP(); 
     -> '2017-07-04 08:50:26' 
OR 
`numeric context` 
SELECT NOW() + 0; 
     -> 20170704085026 

- (マイナス)演算子はのみ動作するように表示されます。

mysql> insert into temp (first, second) 
    -> VALUES ('2017-07-01 03:00:00', '2017-07-01 03:01:00'); 
Query OK, 1 row affected (0.00 sec) 

mysql> select first, second, second - first from temp; 
+---------------------+---------------------+----------------+ 
| first    | second    | first - second | 
+---------------------+---------------------+----------------+ 
| 2017-07-01 03:00:00 | 2017-07-01 03:00:37 | 37.000000  | 
| 2017-07-01 03:00:00 | 2017-07-01 03:01:00 | 100.000000  | 
+---------------------+---------------------+----------------+ 
2 rows in set (0.00 sec) 

ああ素敵! 1分で100秒?私はそうは思わない! :)。 (updated_timeは秒である場合)、正しくお時間を減算する

TIME_TO_SECが必要とされている:TIME_TO_SEC(CURRENT_TIMESTAMP) - updated_time

関連する問題