Этот способ, безусловно, работает, но он вызывает UNIX_TIMESTAMP 2 раза:
mysql> select UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP('2009-09-23 22:07:42');
+---------------------------------------------------------------+
| UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP('2009-09-23 22:07:42') |
+---------------------------------------------------------------+
| 639 |
+---------------------------------------------------------------+
1 row in set (0.05 sec)
Не должны
TIMESTAMPDIFF(SECOND, now(), '2009-09-23 22:07:42')
сделать то же самое только с одним вызовом функции (не считая now()
)? (Нет доступа к MySQL прямо сейчас, а MSSQL работает немного иначе, поэтому не может протестировать).
В основном временная метка UNIX - это количество секунд со времен странной эпохи, поэтому разница - это просто разница в секундах. Кроме того, эта функция доступна только в MySQL 5 и более поздних версиях.
Но в общем, беспокойтесь о производительности, когда у вас есть проблема, напишите читаемый код до тех пор.
SELECT TIME_TO_SEC(TIMEDIFF(NOW(), '2009-09-23 22:07:42'))