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函數是有優先順序的,如果如果第一個條件成立,則返回第一個的值,此時若滿足第二個條件,則數值不發生改變