MySQL从毫秒字段中选择格式化日期

MySQL select formatted date from millisecond field

提问人:Jason C 提问时间:8/12/2013 更新时间:3/20/2023 访问量:75191

问:

我在MySQL数据库中有一列,其中包含以毫秒(epoch)为单位的日期。我想构建一个 SQL 查询,将日期格式化为人类可读的内容(任何格式和时区的日、月、年、小时、分钟、秒)。是否有SQL(或特定于MySQL)的函数来执行此操作?

MySQL SQL 日期 时间

评论

1赞 woofmeow 8/12/2013
您可以在子查询中使用函数。查看下面的答案。from_unixtime

答:

74赞 woofmeow 8/12/2013 #1

尝试使用手册中给出的此类功能FROM_UNIXTIME

SELECT FROM_UNIXTIME(1196440219);
 -> '2007-11-30 10:30:19'

您也可以使用这样的格式

mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
    ->                      '%Y %D %M %h:%i:%s %x');
    -> '2007 30th November 10:30:59 2007'

评论

16赞 Jason C 8/12/2013
完美,谢谢。我的时间以毫秒为单位,所以稍微修改一下就达到了我想要的效果:.SELECT FROM_UNIXTIME(`column` / 1000)
27赞 AbD_Riz 4/7/2016 #2

如果要从字段中获取微秒,请使用 %f,

select FROM_UNIXTIME(CREATETIME/1000,'%Y-%M-%d %H:%i:%s %f') from TABLE_NAME;

+-------------------------------------------------------+
| FROM_UNIXTIME(CREATETIME/1000,'%Y-%M-%d %H:%i:%s %f') |
+-------------------------------------------------------+
| 2016-March-18 16:02:54 342000                         |
+-------------------------------------------------------+

来源 : MYSQL DATE_FORMAT

评论

4赞 Maura 9/29/2016
如果要将毫秒除以 1000 以减少到秒,微秒不一定是 0 吗?
0赞 Jason C 6/19/2019
它不一定是 0,而是 1000 的倍数(每微秒 1000 毫秒)。
0赞 hardika 4/3/2019 #3
CREATE DEFINER=`root`@`localhost` FUNCTION `ConvertTimeDelta`(duration int) RETURNS 
varchar(20) CHARSET utf8mb4
    DETERMINISTIC
BEGIN
 DECLARE time_delta VARCHAR(20);
 DECLARE date_format VARCHAR(20);
 SET date_format = IF (duration > 3599999, '%H:%i:%s', '%i:%s');
 SET time_delta = TIME_FORMAT(SEC_TO_TIME(duration/1000), date_format);
 RETURN time_delta;
END

例如 选择 ConvertTimeDelta(4800240) 结果 = 01:20:00 选择 ConvertTimeDelta(35076) 结果 = 00:35