hive函数
1.关系函数
等值比较
=
语法:A=B
如果表达式A
和表达式B
相等,则为TRUE
;否则为FALSE
不等值比较
<>
语法:A <> B
如果表达式A
为null
,或者表达式B
为null
,返回null
;如果表达式A
和表达式B
不相等,则为true
;否则为false
小于比较
<
语法:A < B
如果表达式A
为null
,或者表达式B
为null
,返回null
;如果A
小于表达式B
,则为true
;否则为false
小于等于(
<=
)、大于(>
)、大于等于(>=
)同上空值判断
is null
语法:A is null
如果表达式A
的值为null
,则为true
;否则为false
非空判断
is not null
语法:A is not null
如果表达式A
的值为null
,则为false
;否则为true
like比较 like
语法:A [not] like B
如果字符串A
或者字符串B
为null
,则返回null
;如果字符串A
符合表达式B
的正则语法,则为true
;否则为false
。B
中字符"_"表示任意单个字符,而字符“%”表示任意数量的字符注意:对特殊字符进行转义时,注意要使用两个反斜杠\ .Java的like/regexp操作:rlike/regexp
语法:A rlike/regexp B
如果字符串A或者字符串B
为null
,则返回null
;如果字符串A
符合Java正则表达式B
的正则语法,则为TRUE
;否则为false
例:select * from dwd.tb_dwd_test where client_name rlike/regexp '^W *'
注意:通配符‘%’在rlike/regexp函数中,只能使用一个‘%’字符,''也只能匹配一个''字符,即'%'和'_'不是通配符,此时通配符为''*
2.日期函数
unix时间戳转日期函数:
from_unixtime
语法:from_unixtime(bigint unixtime[,string format])
转化unix时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:select from_unixtime(1323308943,'yyyyMMdd') from dual;
##返回值为20111208获取当前unix时间戳函数
unix_timestamp
语法:unix_timestamp()
获得当前的时间戳举例:select unix_timestamp() from dual;
##返回值为1323309615日期转unix时间戳函数:
unix_timestamp
语法:unix_timestamp(string date)
转换格式为'yyyy-MM-dd HH:mm:ss' 的日期到unix时间戳。如果转换失败,则返回0。举例:select unix_timestamp('2011-12-07 13:01:03') from dual;
##返回值为1323234063指定格式日期转unix时间戳函数:
unix_timestamp
语法:unix_timestamp(string date,string pattern)
转换pattern格式的日期到unix时间戳。如果转化失败,则返回0举例:select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss') from dual;
##返回值为1323234063日期时间转日期函数:
to_date
语法:to_date(string timestamp)
返回日期时间字段中的日期部分select to_date('2011-12-08 10:03:01') from dual;
##返回值为2011-12-08日期转年函数:
year
语法:year(string date)
返回日期中的年日期转月函数:
month
语法:month(string date)
返回日期中的月份日期转天函数:
day
语法:day(string date)
返回日期中的天日期转小时函数
hour
语法:hour(string date)
返回日期中的小时日期转分钟函数
minute
语法:minute(string date)
返回日期中的分钟 举例:select minute('2011-12-08 10:03:01') from dual;
##返回值为3日期转秒函数
second
语法:second(string date )
返回日期中的秒日期转周函数
weekofyear
语法:weekofyear(string date)
返回日期在当前的周数日期比较函数
datediff
语法:datediff(string enddate,string startdate)
返回结束日期减去开始日期的天数举例 :select datediff('2019-04-01','2019-04-02') from dual;
## 返回值为1日期增加函数
date_add
语法:date_add(string startdate,int days)
返回开始日期startdate增加days天后的日期举例:select date_add('2019-04-08',10) from dual;
## 返回值为2019-04-18日期减少函数
date_sub
语法:date_sub(string strartdate,int days)
返回开始时间startdate减少days天后的日期举例:select date_sub('2019-04-18',10) from dual;
## 返回值:2019-04-08
条件函数
if函数
语法 :if(boolean testCondition, T valueTrue, T valueFalseOrNull)
说明:当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull
举例:select if(app_name = 'group',object_id,null) as deal_id from dw.topic_order where partition_pay_date = '2016-04-22'
等效于select case when app_name = 'group' then object_id else null end as deal_id from dw.topic_order where partition_pay_date = '2016-04-22'
非空查找函数 coalesce
语法:coalesce(t v1,t v2 ,...)
说明:返回参数中的第一个非空值;如果所有值都为null,那么返回null
举例:select coalesce(uuid,'') as uuid from dw.topic_order where partition_pay_date = '2016-04-22'
等效于Oracle中的nvl函数有两个参数时候,nvl函数是有这个函数延伸而来条件判断函数 case
语法:CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
说明:如果 a 等于 b ,那么返回 c ;如果 a 等于 d ,那么返回 e ;否则返回 f 注意:相对而言,case when是最全的条件函数,可以用于判断多种条件;次之是if函数,属于二分判断;最后是coalesce函数,该函数只能对空值和非空进行判断 注意:case when函数是有优先顺序的,如果如果第一个条件成立,则返回第一个的值,此时若满足第二个条件,则数值不发生改变