将MySQL日期字符串转换为Unix时间戳

162

如何将以下格式转换为 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问题吗?你的语法并没有表明如此。 - Álvaro González
1
似乎这个问题是关于MSSQL的。 - Fedir RYKHTIK
4个回答

261

这里是将 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


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 - Damodar Bashyal

38
你一定需要同时使用 STR_TO_DATE 将你的日期转换为 MySQL 标准日期格式,以及 UNIX_TIMESTAMP 来从中获取时间戳。

考虑到你的日期格式,类似于

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

使用Will可以得到一个有效的时间戳。查看STR_TO_DATE文档以获取有关格式字符串的更多信息。


0
如果你想创建一个类似于Java的Date.getTime()返回的时间戳,你应该将其乘以1000。
SELECT UNIX_TIMESTAMP(STR_TO_DATE('Apr 15 2012 12:00AM', '%M %d %Y %h:%i%p'))*1000

现在如果需要更标准的日期格式,请使用:

SELECT UNIX_TIMESTAMP(STR_TO_DATE('2022-12-14 20:58:00', '%Y-%m-%d %H:%i:%s'))*1000

-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的(尽管这个问题有些混淆)。 - Salman A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接