注意
下面函数的string只支持’yyyy-MM-dd HH:mm:ss’ 或 'yyyy-MM-dd’格式的字符串。如果是yyyy/MM/dd这样的日期需要先转换,可以参考下文的格式调整部分。
格式化日期
date_format(date/timestamp/string, fmt)
参数可以是日期,字符串,时间戳
hive> select date_format('2020-06-23','yyyy-MM-dd');
OK
2020-06-23
Time taken: 0.043 seconds, Fetched: 1 row(s)
hive> select date_format('2020-06-23','yyyy-MM-dd HH:mm:ss');
OK
2020-06-23 00:00:00
Time taken: 0.061 seconds, Fetched: 1 row(s)
取出日期中的年/月/日
month/year/day(date/timestamp/string)
hive> select year("2020-02-03");
OK
2020
Time taken: 0.049 seconds, Fetched: 1 row(s)
hive> select month("2020-02-03");
OK
2
Time taken: 0.057 seconds, Fetched: 1 row(s)
hive> select day("2020-02-03");
OK
3
Time taken: 0.052 seconds, Fetched: 1 row(s)
日期与天数的加减
date_add(date/string, n)和date_sub(date/string, n)
hive> SELECT date_add("2020-06-23", 1);
OK
2020-06-24
Time taken: 0.043 seconds, Fetched: 1 row(s)
hive> SELECT date_sub("2020-06-23", 1);
OK
2020-06-22
Time taken: 0.041 seconds, Fetched: 1 row(s)
两个日期相差的天数
datediff(date1/string1, date2/string2)
hive> SELECT datediff('2009-07-30', '2009-07-31');
OK
-1
Time taken: 0.035 seconds, Fetched: 1 row(s)
hive> SELECT datediff('2009-08-30', '2009-07-31');
OK
30
取下周N
hive> select next_day('2019-02-12','Monday');
OK
2019-02-18
Time taken: 0.035 seconds, Fetched: 1 row(s)
月最后一天
hive > select last_day('2020-07-16');
OK
2020-07-31
月第一天
hive > select trunc('2020-07-16' ,'MM');
OK
2020-07-01
调整日期的格式
用字符替换可以把yyyy/MM/dd这些非标准日期格式转化成符合HiveSQL日期函数的格式。
hive> select date_format(regexp_replace("2020-05-06",'/','-'),'yyyy-MM-dd');
OK
2020-05-06
Time taken: 0.049 seconds, Fetched: 1 row(s)