2010-03-13 2 views
26

Я не смог узнать (поиск в Интернете, чтение mysql) Как получить значение DATETIME в секундах в MySQL.MYSQL - datetime to seconds

Я не собираюсь извлекать секунды из datetime, но конвертировать его в считанные секунды.

ответ

27

Если вы хотите иметь разницу между до значений DATETIME, используйте TIMESTAMPDIFF:

TIMESTAMPDIFF (единица измерения, datetime_expr1, datetime_expr2)

Возвращает datetime_expr2 – datetime_expr1, где datetime_expr1 и datetime_expr2 являются дата или даты и времени выражения. Одним из выражений может быть дата, а другая - дата и время; значение даты рассматривается как дата-время, имеющее временную часть «00: 00: 00», где это необходимо. Единица для результата (целое число) задается аргументом unit. Правовые значения для единицы измерения совпадают с юридическими значениями, указанными в описании функции TIMESTAMPADD().

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
-> 128885

unit также может быть HOUR что то, что вы просили в одном из комментариев.

+0

Извините, но я спрашиваю о целом DATETIME :( – Mike

+0

@ Майк: См. Мой обновленный ответ. –

+0

sweet :) Я отмечаю ваш ответ как правильный :) спасибо – Mike

34

Если на "преобразования в секунды", вы имеете в виду "новообращенных к UNIX Timestamp" (т.е. числа секунд с 1970-01-01), то вы можете использовать UNIX_TIMESTAMP функции:

select UNIX_TIMESTAMP(your_datetime_field) 
from your_table 
where ... 


И, ради завершения, для преобразования с временной отметки Unix в дату и время, вы можете использовать функцию FROM_UNIXTIME.

+0

good , и когда я хочу РАЗЛИЧИЕ между двумя датами в ЧАСЫ, следует ли использовать что-то вроде? : select (unix_timestamp ('2010-01-02 18:00:00') - unix_timestamp ('2010-01-01 16:00:00'))/60/60; – Mike

+0

Я полагаю, что функция TIMESTAMPDIFF должна делать трюк: она позволяет указать желаемую единицу (см. Http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff) –

+0

спасибо, Феликс уже предложил использовать timesteampdiff, вот что я хотел – Mike

2

Функция UNIX_TIMESTAMP (datetime) возвращает время unix, которое является числом секунд с 1 января по 1970 год 0000 UTC. Это может быть то, что вам нужно, но если вы имеете дело с датами рождения, исторические даты или даты после 2037

2

Начиная с MySQL 5.5.0 Вы можете использовать to_seconds()

TO_SECONDS(FIELD_NAME) 

FIELD_NAME должен быть DATETIME Типу

6

Использование TIME_TO_SEC в предыдущих версиях для MySQL

ВЫБРАТЬ TIME_TO_SEC (время колонка) FROM таблицы

0

Я создал свой собственный запрос по вашей проблеме:

select (hour(*colname*)*3600 + minute(*colname*)*60 + second(*colname*)) 
from widgets 
where id=1; 
  • Используйте id=1, если вам нужно взять определенную строку.
  • Выход будет в секундах.
+0

Вопрос уже давно дан ответ, и принятый ответ также касается дней, а не только часов и минут. ОП пояснил в комментарии, что он хотел рассчитать разницу между двумя датами в часах. –