
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函数是有优先顺序的,如果如果第一个条件成立,则返回第一个的值,此时若满足第二个条件,则数值不发生改变