Hive条件与日期函数汇总
条件函数
assert_true(BOOLEAN condition)
- 解释
如果condition不为true,则抛出异常,否则返回null
使用案例
select assert_true(1<2) -- 返回null |
coalesce(T v1, T v2, …)
解释
返回第一个不为null的值,如果都为null,则返回null
使用案例
select coalesce(null,1,2,null) -- 返回1 |
if(BOOLEAN testCondition,valueTrue, valueFalseOrNull)
解释
如果testCondition条件为true,则返回第一个值,否则返回第二个值
使用案例
select if(1 is null,0,1) -- 返回1 |
isnotnull(a)
解释
如果参数a不为null,则返回true,否则返回false
使用案例
select isnotnull(1) -- 返回true |
isnull(a)
解释
与isnotnull相反,如果参数a为null,则返回true,否则返回false
使用案例
select isnull(null) -- 返回true |
nullif(a, b)
解释
如果参数a=b,返回null,否则返回a值(Hive2.2.0版本)
使用案例
select nullif(1,2) -- 返回1 |
nvl(T value, T default_value)
解释
如果value的值为null,则返回default_value默认值,否则返回value的值。在null值判断时,可以使用if函数给定默认值,也可以使用此函数给定默认值,使用该函数sql特别简洁。
使用案例
select nvl(1,0) -- 返回1 |
日期函数
add_months(DATE|STRING|TIMESTAMP start_date, INT num_months)
解释
start_date参数可以是string, date 或者timestamp类型,num_months参数时int类型。返回一个日期,该日期是在start_date基础之上加上num_months个月,即start_date之后null_months个月的一个日期。如果start_date的时间部分的数据会被忽略。注意:如果start_date所在月份的天数大于结果日期月的天数,则返回结果月的最后一天的日期。
使用案例
select add_months("2020-05-20",2); -- 返回2020-07-20 |
current_date
解释
返回查询时刻的当前日期
使用案例
select current_date() -- 返回当前查询日期2020-05-20 |
current_timestamp()
解释
返回查询时刻的当前时间
使用案例
select current_timestamp() -- 2020-05-20 14:40:47.273 |
datediff(STRING enddate, STRING startdate)
解释
返回开始日期startdate与结束日期enddate之前相差的天数
使用案例
select datediff("2020-05-20","2020-05-21"); -- 返回-1 |
date_add(DATE startdate, INT days)
解释
在startdate基础上加上几天,然后返回加上几天之后的一个日期
使用案例
select date_add("2020-05-20",1); -- 返回2020-05-21,1表示加1天 |
date_sub(DATE startdate, INT days)
解释
在startdate基础上减去几天,然后返回减去几天之后的一个日期,功能与date_add很类似
使用案例
select date_sub("2020-05-20",1); -- 返回2020-05-19,1表示减1天 |
date_format(DATE|TIMESTAMP|STRING ts, STRING fmt)
解释
将date/timestamp/string类型的值转换为一个具体格式化的字符串。支持java的SimpleDateFormat格式,第二个参数fmt必须是一个常量
使用案例
select date_format('2020-05-20', 'yyyy'); -- 返回2020 |
dayofmonth(STRING date)
解释
返回一个日期或时间的天,与day()函数功能相同
使用案例
select dayofmonth('2020-05-20') -- 返回20 |
extract(field FROM source)
解释
提取 day, dayofweek, hour, minute, month, quarter, second, week 或者year的值,field可以选择day, dayofweek, hour, minute, month, quarter, second, week 或者year,source必须是一个date、timestamp或者可以转为 date 、timestamp的字符串。注意:Hive 2.2.0版本之后支持该函数
使用案例
select extract(year from '2020-05-20 15:21:34.467'); -- 返回2020,年 |
year(STRING date)
解释
返回时间的年份,可以用extract函数替代
使用案例
select year('2020-05-20 15:21:34'); -- 返回2020 |
quarter(DATE|TIMESTAMP|STRING a)
解释
返回给定时间或日期的季度,1至4个季度,可以用extract函数替代
使用案例
select quarter('2020-05-20 15:21:34'); -- 返回2,第2季度 |
month(STRING date)
解释
返回时间的月份,可以用extract函数替代
使用案例
select month('2020-05-20 15:21:34') -- 返回5 |
day(STRING date)
解释
返回一个日期或者时间的天,可以用extract函数替代
使用案例
select day("2020-05-20"); -- 返回20 |
hour(STRING date)
解释
返回一个时间的小时,可以用extract函数替代
使用案例
select hour('2020-05-20 15:21:34');-- 返回15 |
minute(STRING date)
解释
返回一个时间的分钟值,可以用extract函数替代
使用案例
select minute('2020-05-20 15:21:34'); -- 返回21 |
second(STRING date)
解释
返回一个时间的秒,可以用extract函数替代
使用案例
select second('2020-05-20 15:21:34'); --返回34 |
from_unixtime(BIGINT unixtime [, STRING format])
解释
将Unix时间戳转换为字符串格式的时间(比如yyyy-MM-dd HH:mm:ss格式)
使用案例
select from_unixtime(1589960708); -- 返回2020-05-20 15:45:08 |
from_utc_timestamp(T a, STRING timezone)
解释
转换为特定时区的时间
使用案例
select from_utc_timestamp('2020-05-20 15:21:34','PST'); -- 返回2020-05-20 08:21:34.0 |
last_day(STRING date)
解释
返回给定时间或日期所在月的最后一天,参数可以是’yyyy-MM-dd HH:mm:ss’ 或者 ‘yyyy-MM-dd’类型,时间部分会被忽略
使用案例
select last_day('2020-05-20 15:21:34'); -- 返回2020-05-31 |
to_date(STRING timestamp)
解释
返回一个字符串时间的日期部分,去掉时间部分,2.1.0之前版本返回的是string,2.1.0版本及之后返回的是date
使用案例
select to_date('2020-05-20 15:21:34'); -- 返回2020-05-20 |
to_utc_timestamp(T a, STRING timezone)
解释
转换为世界标准时间UTC的时间戳,与from_utc_timestamp类似
使用案例
select to_utc_timestamp('2020-05-20 15:21:34', 'GMT'); -- 返回2020-05-20 15:21:34.0 |
trunc(STRING date, STRING format)
解释
截断日期到指定的日期精度,仅支持月(MONTH/MON/MM)或者年(YEAR/YYYY/YY)
使用案例
select trunc('2020-05-20', 'YY'); -- 返回2020-01-01,返回年的1月1日 |
unix_timestamp([STRING date [, STRING pattern]])
解释
参数时可选的,当参数为空时,返回当前Unix是时间戳,精确到秒。可以指定一个具体的日期,转换为Unix时间戳格式
使用案例
-- 返回1589959294 |
weekofyear(STRING date)
解释
返回一个日期或时间在一年中的第几周,可以用extract替代
使用案例
select weekofyear('2020-05-20 15:21:34'); -- 返回21,第21周 |
next_day(STRING start_date, STRING day_of_week)
解释
参数start_date可以是一个时间或日期,day_of_week表示星期几,比如Mo表示星期一,Tu表示星期二,Wed表示星期三,Thur表示星期四,Fri表示星期五,Sat表示星期六,Sun表示星期日。如果指定的星期几在该日期所在的周且在该日期之后,则返回当周的星期几日期,如果指定的星期几不在该日期所在的周,则返回下一个星期几对应的日期
使用案例
select next_day('2020-05-20','Mon');-- 返回当前日期的下一个周一日期:2020-05-25 |
该函数比较重要:比如取当前日期所在的周一和周日,通过长用在按周进行汇总数据
select date_add(next_day('2020-05-20','MO'),-7); -- 返回当前日期的周一日期2020-05-18 |
months_between(DATE|TIMESTAMP|STRING date1, … date2)
解释
返回 date1 和 date2 的月份差。如果date1大于date2,返回正值,否则返回负值,如果是相减是整数月,则返回一个整数,否则会返回小数
使用案例
select months_between('2020-05-20','2020-05-20'); -- 返回0 |