Mysql——FROM_UNIXTIME和UNIX_TIMESTAMP函数的用法

本文介绍MySQL中FROM_UNIXTIME和UNIX_TIMESTAMP函数的用法,包括如何将秒级和毫秒级的时间戳转换为不同格式的日期,并展示了如何获取指定日期或当前时间的时间戳。

FORM_UNIXTIME用法


mysql> SELECT FROM_UNIXTIME( 1648310400, '%Y%m%d' );
+---------------------------------------+
| FROM_UNIXTIME( 1648310400, '%Y%m%d' ) |
+---------------------------------------+
| 20220327                              |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME( 1648310400, '%Y' );
+-----------------------------------+
| FROM_UNIXTIME( 1648310400, '%Y' ) |
+-----------------------------------+
| 2022                              |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME( 1648310400, '%Y年%m月%d日' );
+---------------------------------------------+
| FROM_UNIXTIME( 1648310400, '%Y年%m月%d日' )       |
+---------------------------------------------+
| 20220327|
+---------------------------------------------+
1 row in set (0.00 sec)

通过上面三个实例,可以简单了解了FROM_UNIXTIME()函数的用法,该函数以一共需要提供两个参数:
第一个参数可以是一个时间戳(秒级)或者是某字段(也得是10位的时间戳否则转换结果为空)
第二个参数是转换的格式可以是%Y%m%d%Y年%m月%d日、或者%Y等格式
以下是使用FROM_UNIXTIME函数对毫秒级时间戳格式的字段转化
所操作的表:ms_article
在这里插入图片描述

SELECT FROM_UNIXTIME(create_date/1000,'%Y') as year from ms_article
注:因为是毫秒级13位的时间戳,所以要先/1000变成10位秒级的时间戳,否则是转不出来的

结果:
在这里插入图片描述

UNIX_TIMESTAMP用法

mysql> SELECT UNIX_TIMESTAMP('2022-03-27') ;
+------------------------------+
| UNIX_TIMESTAMP('2022-03-27') |
+------------------------------+
|                   1648310400 |
+------------------------------+
1 row in set (0.00 sec)


mysql> SELECT UNIX_TIMESTAMP() ;
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1648369729 |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2022-03-27 16:30:20') ;
+---------------------------------------+
| UNIX_TIMESTAMP('2022-03-27 16:30:20') |
+---------------------------------------+
|                            1648369820 |
+---------------------------------------+
1 row in set (0.00 sec)

对于UNIX_TIMESTAMP()函数,可传参也可以不传,如果不传参,则返回当前时间的时间戳,如果传参则返回指定时间的时间戳,但必须是'yyyy-MM-dd HH:mm:ss格式

`from_unixtime(timestamp)` 函数主要用于将 Unix 时间戳转换为日期时间字符串。 ### 功能 通常意义上讲的时间戳 `timestamp`,均是 Unix 时间(Unix time),起源于 Unix 系统,计量方式是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。`from_unixtime(timestamp)` 函数就是把这样的秒数时间戳转化为人们更易读的日期时间格式 [^2]。 ### 使用方法 - **基本使用**:在 MySQL 中,可直接使用该函数对时间戳字段进行转换。例如,要查看 `ebk_cls_io_log` 表中 `create_time` 字段转换后的日期时间,可使用如下语句: ```sql SELECT *, FROM_UNIXTIME(create_time) AS DATETIME FROM ebk_cls_io_log; ``` 此代码会将 `create_time` 字段的时间戳转换为日期时间字符串,并将其命名为 `DATETIME` 显示 [^1]。 - **在 Spark SQL 中使用**:可以进行时间戳日期字符串的相互转换以及日期计算。例如: ```sql -- 将时间戳转化为日期字符串 SELECT from_unixtime(1674180000, 'yyyy-MM-dd HH:mm:ss'); -- 将字符串转化为时间戳 SELECT to_unix_timestamp('2023-01-20 10:00:00', 'yyyy-MM-dd HH:mm:ss'); -- 计算 2 个字符串之间间隔的秒数 SELECT to_unix_timestamp('2022-10-21 00:12:30', 'yyyy-MM-dd HH:mm:ss') - to_unix_timestamp('2022-10-21 00:10:30', 'yyyy-MM-dd HH:mm:ss') AS time_diff; ``` 这里 `from_unixtime` 用于将时间戳转换为指定格式的日期字符串 [^4]。 - **在 Hive 中使用**:示例如下: ```sql SELECT from_unixtime(cast(1683701579457/1000 as int)); ``` 不过在 Hive 中使用该函数可能存在问题,比如结果比正常时间晚 8 个小时 [^5]。 - **结合其他函数使用**:当 `watermark` 定义语句中 `ts` 为 `bigint` 类型且是 13 位毫秒时,需要先将其除以 1000 变成秒,再通过 `FROM_UNIXTIME` 函数转化为日期,最后通过 `TO_TIMESTAMP` 函数将其转换为 `timestamp` 类型,示例代码如下: ```sql -- 假设 ts 是 bigint 类型的 13 位毫秒时间戳 SELECT TO_TIMESTAMP(FROM_UNIXTIME(ts/1000)) FROM your_table; ``` 这里 `FROM_UNIXTIME` 作为中间步骤,将处理后的秒级时间戳转换为日期 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值