图解HIVE时间和日期and类型转换
Posted 小基基o_O
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解HIVE时间和日期and类型转换相关的知识,希望对你有一定的参考价值。
文章目录
类型转换图
TIMESTAMP
现在
SELECT CURRENT_TIMESTAMP();
DATE
今天
SELECT CURRENT_DATE();
昨天
SELECT DATE_SUB(CURRENT_DATE(),1);
-- 或
SELECT DATE_ADD(CURRENT_DATE(),-1);
TIMESTAMP => DATE
SELECT TO_DATE(CURRENT_TIMESTAMP());
秒数(Unix时间戳)
- Unix时间戳,外文名Unix timestamp
从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑 闰秒 - 数据类型:
bigint
-- 现在的秒数
SELECT UNIX_TIMESTAMP();
毫秒 => TIMESTAMP(注意时区问题)
-- 可能会有时区问题
SELECT FROM_UTC_TIMESTAMP(0L,'UTC+8');
字符串
- 数据类型:
string
- Unix时间戳转字符串时,注意时区问题
TIMESTAMP => 字符串
SELECT DATE_FORMAT(CURRENT_TIMESTAMP(),'yyyy-MM-dd HH:mm:ss');
字符串 => TIMESTAMP
SELECT CAST('2022-04-07 19:41:37' AS TIMESTAMP);
DATE => 字符串
SELECT DATE_FORMAT(CURRENT_DATE(),'yyyy-MM-dd');
字符串 => DATE
SELECT TO_DATE('2022-04-07 19:41:37');
-- 2022-04-07
字符串 => 秒数(注意时区问题,慎用)
SELECT UNIX_TIMESTAMP('1970-01-01 00:00:00');
秒数 => 字符串(注意时区问题)
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
-- 可能会有时区问题
-- 解决时区问题
SELECT FROM_UNIXTIME(0+UNIX_TIMESTAMP('1970-01-01 00:00:00')+28800);
-- 1970-01-01 08:00:00
毫秒 => TIMESTAMP => STRING
-- 解决时区问题
SELECT
DATE_FORMAT(
FROM_UTC_TIMESTAMP((UNIX_TIMESTAMP('1970-01-01 00:00:00')*1000)+0L,'GMT+8'),'yyyy-MM-dd HH:mm:ss'
);
补充
1、CAST 可用于类型转换
SELECT
CAST('12' AS INT),
CAST('1.2' AS FLOAT);
2、to_date 解析结果为 NULL
2021/11/11
会解析成NULL
,坑在于/
SELECT to_date('2021/11/11');
3、年月中的月不是两个字符
CONCAT(YEAR('2021-09-01'),'-',MONTH('2021-09-01'))
得到2021-9
而不是2021-09
,排序时会乱,对此可用下面2种
DATE_FORMAT(TO_DATE('2021-09-01'),'yyyy-MM')
-- 或
SUBSTR('2021-09-01',0,7)
以上是关于图解HIVE时间和日期and类型转换的主要内容,如果未能解决你的问题,请参考以下文章