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

Как преобразовать следующий формат в метку времени 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

person redcoder    schedule 21.06.2012    source источник
comment
Дата хранится в БД в виде текста?   -  person strnk    schedule 21.06.2012
comment
Это действительно вопрос MySQL? Ваш синтаксис этого не предполагает .   -  person Álvaro González    schedule 21.06.2012
comment
Вроде в чём вопрос по MSSQL.   -  person Fedir RYKHTIK    schedule 23.05.2013


Ответы (4)


Вот пример того, как преобразовать DATETIME в метку времени UNIX:
SELECT UNIX_TIMESTAMP(STR_TO_DATE('Apr 15 2012 12:00AM', '%M %d %Y %h:%i%p'))

Вот пример того, как изменить формат даты:
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')

Документация: UNIX_TIMESTAMP, FROM_UNIXTIME

person Query Master    schedule 21.06.2012
comment
Спасибо. Это работает. Это также можно использовать в других операторах, таких как update, delete, insert и т. Д. - person MR_AMDEV; 01.07.2019
comment
После стольких испытаний ваше решение сработало для меня: 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 - person Damodar Bashyal; 15.11.2019

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

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

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

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

person strnk    schedule 21.06.2012

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

person stackMonk    schedule 06.10.2014
comment
Не отвечает на вопрос из исходного сообщения. - person Evan Donovan; 05.07.2018
comment
это для людей, которым нужно было преобразовать только текущую дату в свой запрос, отвечает на часть вопроса, нет необходимости в вашем привратнике, Эван, люди проголосовали за то же самое, чтобы показать, что им это нужно - person stackMonk; 05.07.2018
comment
Исходный вопрос был задан для преобразования определенного формата; это не ответ на этот вопрос. Я отменю голос против, если вы внесете правку, чтобы прояснить это. - person Evan Donovan; 06.07.2018
comment
в самой первой строке было пояснено, что это на текущую дату. - person stackMonk; 06.07.2018
comment
Я отредактировал, чтобы прояснить связь этого ответа с исходным вопросом и привести пример. - person Evan Donovan; 06.07.2018

С 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
person Brian Smith    schedule 19.02.2015
comment
Это ответ для MSSQL (хотя в этом вопросе есть некоторая путаница). - person Salman A; 19.02.2015