注意

下面函数的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)