【问题标题】:MySQL select formatted date from millisecond fieldMySQL从毫秒字段中选择格式化日期
【发布时间】:2013-08-13 02:54:17
【问题描述】:

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

【问题讨论】:

  • 您可以在子查询中使用from_unixtime 函数。检查下面的答案。

标签: mysql sql date time


【解决方案1】:

尝试使用FROM_UNIXTIME 中给出的manual 中的函数

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

你也可以使用这样的格式

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

【讨论】:

  • 完美,谢谢。我的时间以毫秒为单位,因此稍作修改就完全符合我的要求:SELECT FROM_UNIXTIME(`column` / 1000)
【解决方案2】:

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

select FROM_UNIXTIME(DATE_COLUMN/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

【讨论】:

  • 如果你将毫秒除以 1000 以减少到秒,微秒不一定是 0 吗?
  • 不一定是 0,而是 1000 的倍数(1000 ms/usec)。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2014-10-12
    相关资源
    最近更新 更多