TOP

hive 中時間戳與時間字符串的相互轉換
2018-12-30 13:04:52 】 瀏覽:1934
Tags:

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/HappyRocking/article/details/80854778

時間戳是數據庫常用的存放日期的形式之一,表示從 UTC 時間’1970-01-01 00:00:00’開始到現在的秒數,與常規時間格式如 ‘2018-01-01 00:00:00’可以相互轉換,方法如下。

一、unix_timestamp 函數用法

1、unix_timestamp() 返回當前時間戳。另外,current_timestamp() 也有同樣作用。

hive> select unix_timestamp();
unix_timestamp(void) is deprecated. Use current_timestamp instead.
OK
1530241405
Time taken: 0.237 seconds, Fetched: 1 row(s)

2、unix_timestamp(string date) 返回 date 對應的時間戳,date 格式必須為 yyyy-MM-dd HH:mm:ss

hive> select unix_timestamp('2018-06-29 00:00:00');
OK
1530201600
Time taken: 0.232 seconds, Fetched: 1 row(s)

3、unix_timestamp(string date, string format) 返回 date 對應的時間戳,date 格式由 format 指定。

hive> select unix_timestamp('2018/06/29 09', 'yyyy/MM/dd HH');
OK
1530234000
Time taken: 0.755 seconds, Fetched: 1 row(s)

二、from_unixtime 函數用法

1、from_unixtime(int/bigint timestamp) 返回 timestamp 時間戳對應的日期,格式為 yyyy-MM-dd HH:mm:ss。

hive> select from_unixtime(1000000000);
OK
2001-09-09 09:46:40
Time taken: 0.316 seconds, Fetched: 1 row(s)

2、from_unixtime(int/bigint timestamp, string format) 返回 timestamp 時間戳對應的日期优乐棋牌app下载,格式由 format 指定。

hive> select from_unixtime(1000000000, 'yyyy/MM/dd HH');
OK
2001/09/09 09
Time taken: 0.24 seconds, Fetched: 1 row(s)

三、“毫秒”時間戳的特殊處理

有時候,存放的時間戳不是秒數,而是毫秒數优乐棋牌app下载,因此轉換前需要除以1000。

同理,時間轉成時間戳時,也需要乘以 1000。

select
    timestamps,
    from_unixtime(cast(timestamps/1000 as int))
from
    test_table
where
    timestamps > UNIX_TIMESTAMP('2018-06-25 09:00:00') * 1000
and timestamps < UNIX_TIMESTAMP('2018-06-25 09:10:00') * 1000

結果為:
這里寫圖片描述

如何辨別時間戳是秒數還是毫秒數

2001-09-09 09:46:40 ~ 2286-11-21 01:46:40 之間的時間戳,都是10位數。

因此,我們這個時代使用的時間戳一般都是10位。如果遇到13位的時間戳,則為毫秒數。

請關注公眾號獲取更多資料



】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇Hive中文注釋問題 下一篇Hbase表映射成hive中