MySQL преобразует строку даты в метку времени Unix


137

Как мне преобразовать следующий формат в метку времени Unix?

Apr 15 2012 12:00AM

Формат, который я получаю из БД, кажется, имеет AMв конце. Я пытался использовать следующее, но это не сработало:

CONVERT(DATETIME, Sales.SalesDate, 103) AS DTSALESDATE,  
CONVERT(TIMESTAMP, Sales.SalesDate, 103) AS TSSALESDATE

where Sales.SalesDate value is Apr 15 2012 12:00AM

1
Дата хранится в виде текста в БД?
strnk

1
Это действительно вопрос MySQL? Ваш синтаксис не предполагает этого.
Альваро Гонсалес

1
Кажется, что вопрос о MSSQL.
Федир РИХТИК

Ответы:


224

Попробуйте этот запрос для CONVERT DATETIME to UNIX TIME STAMP

SELECT UNIX_TIMESTAMP(STR_TO_DATE('Apr 15 2012 12:00AM', '%M %d %Y %h:%i%p'))

Этот запрос для CHANGE DATE FORMATE

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(STR_TO_DATE('Apr 15 2012 12:00AM', '%M %d %Y %h:%i%p')),'%m-%d-%Y %h:%i:%p')

1
Спасибо. Это работает. Это также может быть использовано в других заявлениях, таких как обновление, удаление, вставка и т. Д.
MR_AMDEV

1
После стольких испытаний ваше решение работал для меня: select * from (SELECT order_increment_id, FROM_UNIXTIME(UNIX_TIMESTAMP(STR_TO_DATE(order_date, '%d %M %Y %h:%i:%s %p')),'%Y-%m-%d') as order_date, email_sent FROM `packingslip_header` where email_sent=0) t where order_date >= '2019-11-13' ORDER BY order_increment_id ASCЭто дата , я была 31 Oct 2017 4:16:49 pmтак что мне нужно использовать %d %M %Y %h:%i:%s %pдляSTR_TO_DATE
Дамодара Bashyal

35

Вам, безусловно, придется использовать как STR_TO_DATEдля преобразования даты в стандартный формат даты MySQL, так и UNIX_TIMESTAMPдля получения метки времени из нее.

Учитывая формат вашей даты, что-то вроде

UNIX_TIMESTAMP(STR_TO_DATE(Sales.SalesDate, '%M %e %Y %h:%i%p'))

Уилл даст вам правильную метку времени. Посмотрите STR_TO_DATEдокументацию, чтобы получить больше информации о строке формата.


10

Для текущей даты просто используйте UNIX_TIMESTAMP()в вашем запросе MySQL.


1
Не отвечает на вопрос из исходного поста.
Эван Донован

это для людей, которым нужно было конвертировать только текущую дату в своем запросе, отвечает на часть вопроса, нет необходимости в вашем контроле, Эван, люди проголосовали за то же самое, чтобы показать, что им это нужно
stackMonk

Оригинальный вопрос, заданный для преобразования определенного формата; это не ответ на этот вопрос. Я отменю понижающий голос, если вы отредактируете, чтобы уточнить это.
Эван Донован

в самой первой строке было уточнено, что это на текущую дату.
stackMonk

Я отредактировал, чтобы уточнить связь этого ответа с исходным вопросом и привести пример.
Эван Донован

-5

С http://www.epochconverter.com/

SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())

My bad, SELECT unix_timestamp(time) Time format: YYYY-MM-DD HH:MM:SS or YYMMDD or YYYYMMDD. More on using timestamps with MySQL:

http://www.epochconverter.com/programming/mysql-from-unixtime.php

1
Этот ответ для MSSQL (хотя этот вопрос имеет некоторую путаницу).
Салман А
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.