Как преобразовать метку времени в дату и время в MySQL?

133

Как конвертировать 1300464000в 2011-03-18 16:00:00в MySQL?

компиляции вентилятора
источник
2
Пожалуйста, найдите существующие вопросы / ответы, прежде чем размещать новый вопрос - эта тема уже была рассмотрена достаточно подробно.
Джон Паркер
2
Вы уже ознакомились с документацией? Это все есть: dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
Феликс Клинг,
2
возможный дубликат параметра « Преобразовать метку времени в читаемую дату во время запроса»
Джон Паркер,

Ответы:

201

Используйте FROM_UNIXTIME()функцию в MySQL

Помните, что если вы используете фреймворк, который хранит его в миллисекундах (например, временная метка Java), вам нужно разделить на 1000, чтобы получить правильное время Unix в секундах.

Ричард Туин
источник
1
SELECT from_unixtime( TIMESTAMP( "2011-12-01", "22:01:23.048" ) )не работает. Зачем? с использованием v5.6
Янус Троелсен
3
@JanusTroelsen SELECT from_unixtime( unix_timestamp(TIMESTAMP( "2011-12-01", "22:01:23.048" ) ) )работает. TIMESTAMP()не возвращает целочисленное значение.
cnvzmxcvmcx
4
Просто потому, что я сделал это и был сбит с толку на выходе: MySQL хранит время Unix в секундах, тогда как многие другие фреймворки хранят его в миллисекундах (то есть отметку времени Java). Так что просто не забудьте разделить на 1000, если вы используете эту функцию для данных, поступающих откуда-то, где для времени Unix используются миллисекунды.
Крис Томпсон,
64
DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%Y-%m-%d %H:%i:%s') as "Date" FROM `orders`

Это окончательное решение, если данная дата находится в закодированном формате, например 1300464000

Кингшук Деб
источник
3
Спасибо за это. Чтобы DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%d-%m-%Y %H:%i:%s') as "Date" FROM `orders`
JNP Web Developer
Я почти уверен, что DATE_FORMAT (FROM_UNIXTIME ( orderdate), '% Y-% m-% d') в качестве «Date» FROM ordersбудет лучшим решением: D
Кайл
14

Чтобы ответить на комментарий Януса Троельсена

Используйте UNIX_TIMESTAMP вместо TIMESTAMP

SELECT from_unixtime( UNIX_TIMESTAMP(  "2011-12-01 22:01:23.048" ) )

Функция TIMESTAMP возвращает дату или DateTime, а не метку времени, а UNIX_TIMESTAMP возвращает метку времени unix.

ksvendsen
источник
кажется очевидным сравнить время unix с временем unix. Я использую SELECT (CAST (DATE_FORMAT (from_unixtime (UNIX_TIMESTAMP (CURRENT_TIMESTAMP)), '% Y-% m-% d') as DATE) <CAST ('2019-05-02' AS DATE)); для сравнения дат я заменяю 2019-05 * 02 на форматированный объект datetime в php. Thnaks.
Mantisse
1
Пожалуйста, не отвечайте таким образом на вопрос, отличный от исходного.
Павел Станковский
Это никоим образом не отвечает на исходный вопрос
Нико Хаасе
7

Ты можешь использовать

select from_unixtime(1300464000,"%Y-%m-%d %h %i %s") from table;

Подробное описание о

  1. FROM_UNIXTIME ()
  2. UNIX_TIMESTAMP ()
Дилрадж Сингх
источник
Я бы использовал этот формат для военного времени "% Y-% m-% d% H% i% s"
Таннер Бертон
3

SELECT from_unixtime( UNIX_TIMESTAMP(fild_with_timestamp) ) from "your_table"
Эта работа для меня

Лео
источник