一、时间函数
1、unix时间戳转日期函数:from_unixtime()
语法:from_unixtime(bigint unixtime,'string format')
返回值:string
说明:转化unix时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式
eg:select from_unixtime(12334454333,'yyyyMMdd') from default.dual;
2、获取当前unix时间戳函数:unix_timestamp()
语法:unix_timestamp()
返回值:bigint
说明:获得当前时区的unix时间戳
3、日期转unix时间戳函数:unix_timestamp()
语法:unix_timestamp(string date)
返回值:bigint
说明:转换格式为"yyyy-MM-dd HH-mm-ss"的日期到unix时间戳。如果转化失败,则返回0
4、指定格式日期转unix时间戳函数:unix_timestamp()
语法:unix_timestamp(string date,string pattern)
返回值:bigint
说明:转换pattern格式的日期到unix时间戳。如果转化失败,则返回0
5、日期时间转日期函数:to_date()
语法:to_date(string timestamp)
返回值:string
说明:返回日期时间字段中的日期部分
6、日期转年函数:year()
语法:year(string date)
返回值:int
说明:返回日期中的年
7、日期转月函数:month()
语法:month(string date)
返回值:int
说明:返回日期中的月
8、日期转天函数:day()
语法:day(string date)
返回值:int
说明:返回日期中的天
9、日期转小时函数:hour()
语法:hour(string date)
返回值:int
说明:返回日期中的小时
10、日期转分钟函数:minute()
语法:minute(string date)
返回值:int
说明:返回日期中的分钟
11、日期转秒函数:second()
语法:second(string date)
返回值:int
说明:返回日期中的秒
12、日期转周函数:weekofyear(string date)
语法:weekofyear(string date)
返回值:int
说明:返回日期在当前的周数
13、日期比较函数:datediff
语法:datediff(string enddate,string startdate)
返回值:int
说明:返回结束日期减去开始日期的天数
14、日期增加函数:date_add()
语法:date_add(string startdate,int days)
返回值:string
说明:返回开始日期startdate增加days天后的日期
15、日期减少函数:date_sub()
语法:date_sub(string startdate,int days)
返回值:返回开始日期startdate减少days天后的日期
16、日期整月变化函数:add_months()
语法:add_months('yyyy-MM-dd',int num)
返回值:返回传入日期N个月后的日期(N为正为往后推,N为负往前推)
17、日期返回当月第N天:dayofmonth()
语法:dayofmonth('yyyy-MM-dd')
返回值:返回传入日期是当月第几天
二、条件函数
1、if函数:if
语法:if(boolean testCondition, T valaueTrue,T valueFalseOrNull)
返回值:T
说明:当条件testCondition为true时,返回valueTrue;否则返回valueFalseOrNull
eg:select if(1=2,100,200) from dual;
200
select if(1=1,100,200) from dual;
100
2、非空查找函数:coalesce
语法:coalesce(T v1,T v2,...)
返回值:T
说明:返回参数中的第一个非空值;如果所有的值都为null,那么返回null
eg:select coalesce(NULL,'100','50') from dual;
100
3、条件判断函数:case
语法:case a when b then c [when d then e]*[else f] end
返回值:T
说明:如果a=b,则返回c;如果a=d,则返回e;否则返回f
eg:select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from dual;
mary
select case 200 when 50 then 'tom' when 100 then 'mary' else 'tim' end from dual;
tim
4、条件判断函数:case
语法:case when a then b [when c then d]*[else e] end
返回值:T
说明:如果a为true,则返回b;如果c为true,则返回d;否则返回e
eg:select case when 1=2 then 'tom' when 2=2 then 'mary' else 'tim' end from dual;
mary
select case when 1=1 then 'tom' when 1=2 then 'mary' else 'tim' end from dual;
tom
三、字符串函数
1、字符串长度计算函数 length
语法:length(string A)
返回值:int
说明:返回字符串A的长度
2、字符串反转函数 reverse
语法:reverse(string A)
返回值:string
说明:返回字符串A的反转结果
3、字符串连接函数 concat
语法:concat(string A,string B,...)
返回值:string
说明:返回输入字符串连接后的结果,支持任意个输入字符串
4、带分隔符字符串连接函数 concat_ws()
语法:concat_ws(string SEP,string A,string B,...)
返回值:string
说明:返回字符串连接后的结果,SEP表示各字符串间的分隔符
5、字符串截取函数 substr、substring
语法:substr(string A,int start,int len) \ substring(string A,int start,int len)
返回值:string
说明:返回字符串A从start位置开始,长度len的字符串。start可以为负,为负表示从倒数第len位开始计数。
注:开始计数位置为1,不是0
注:第三个len参数可以不加,表示从标记位到结尾的字符串。
6、字符串转大写函数 upper、ucase
语法:upper(string A) / ucase(string B)
返回值:string
说明:返回字符串A的大写格式
7、字符串转小写函数 lower、lcase
语法:lower(string A) / lcase(string B)
返回值:string
说明:返回字符串A的小写格式
8、去空格函数 trim
语法:trim(string A)
返回值:string
说明:去除字符串两边的空格
9、左边去空格函数 ltrim
语法:ltrim(string A)
返回值:string
说明:去除字符串左边的空格
10、右边去空格函数 rtrim
语法:rtrim(string A)
返回值:string
说明:去除字符串右边的空格
11、正则表达式替换函数 regexp_replace
语法:regexp_replace(string A,string B,string C)
返回值:string
说明:将字符串A中的符合java正则表达式B的部分替换为C
注意:在有些情况下要使用转义字符,类似oracle中的regexp_replace()函数
12、正则表达式解析函数 regexp_extract
语法:regexp_extract(string subject,string pattern,int index)
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符串
eg:
hive (db_hive)> select regexp_extract('foothebar','foo(.*?)(bar)',1) from dual;
OK
_c0
the
Time taken: 0.043 seconds, Fetched: 1 row(s)
hive (db_hive)> select regexp_extract('foothebar','foo(.*?)(bar)',2) from dual;
OK
_c0
bar
Time taken: 0.036 seconds, Fetched: 1 row(s)
hive (db_hive)> select regexp_extract('foothebar','foo(.*?)(bar)',0) from dual;
OK
_c0
foothebar
Time taken: 0.031 seconds, Fetched: 1 row(s)
注意:在有些情况下要使用转义字符,=要用双竖线转义,java正则表达式的规则。
13、URL解析函数 parse_url
语法:parse_url(string urlString,string partToExtract [,stringkeyToExtract])
返回值:string
说明:返回URL中指定部分。partToExtract的有效值为:HOST,PATH,QUERY,PROTOCOL,AUTOHORITY,FILE,and USERINFO.
14、json解析函数 get_json_object ---解析一个字段
语法:get_json_object(string json_string,string path)
返回值:string
说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回null。
hive (db_hive)> SELECT get_json_object('{"website":"www.baidu.com","name":"????"}', '$.website') from dual;
OK
_c0
www.baidu.com
Time taken: 0.204 seconds, Fetched: 1 row(s)
15、json解析函数 json_tuple ---用来解析json字符串的多个字段
语法:lateral view json_tuple(json_string,'filtertype','filtersubtype','filtername') b as filtertype,filtersubstring,filtername;
返回值:string
说明:解析json的字符串json_string中的多个字段
hive (db_hive)> select json_tuple('{"website":"www.baidu.com","name":"mabowen"}', 'website', 'name');
OK
c0 c1
www.baidu.com
Time taken: 0.056 seconds, Fetched: 1 row(s)
16、空格字符串函数 space
语法:space(int n)
返回值:string
说明:返回长度为n的字符串
17、重复字符串函数 repeat
语法:repeat(strng str,int n)
返回值:string
说明:返回重复n次后的字符串
hive (db_hive)> select repeat('abc',2) from dual;
OK
_c0
abcabc
Time taken: 0.039 seconds, Fetched: 1 row(s)
18、首字符ascii函数 ascii
语法:ascii(string str)
返回值:int
说明:返回字符串str第一个字符的ascii码
hive (db_hive)> select ascii('Aaaa') from dual;
OK
_c0
65
Time taken: 0.029 seconds, Fetched: 1 row(s)
19、左补足函数 lpad
语法:lpad(string str,int len,string pad)
返回值:string
说明:将str字符用pad字符左补足到len位
hive (db_hive)> select lpad('abc',10,'td') from dual;
OK
_c0
tdtdtdtabc
Time taken: 0.041 seconds, Fetched: 1 row(s)
20、右补足函数 rpad
语法:rpad(string str,int len,string pad)
返回值:string
说明:将str字符用pad进行右补足到len位
hive (db_hive)> select rpad('abc',10,'td') from dual;
OK
_c0
abctdtdtdt
Time taken: 0.039 seconds, Fetched: 1 row(s)
注:pad不支持默认。
21、分割字符串函数 split
语法:split(string str,string pat)
返回值:array
说明:按照pat字符串分割str,
hive (db_hive)> select split('mbw-xgm','-') from dual;
OK
_c0
["mbw","xgm"]
Time taken: 0.038 seconds, Fetched: 1 row(s)
22、集合查找函数 find_in_set
语法:find_in_set(string str,string srtList)
返回值:int
说明:返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找到该str字符,则返回0
hive (db_hive)> select find_in_set('mbw','mbw,xgm,mbw') from dual;
OK
_c0
1
Time taken: 0.036 seconds, Fetched: 1 row(s)
hive (db_hive)> select find_in_set('xgm','mbw,xgm,mbw') from dual;
OK
_c0
2
Time taken: 0.03 seconds, Fetched: 1 row(s)
hive (db_hive)> select find_in_set('ml','mbw,xgm,mbw') from dual;
OK
_c0
0
Time taken: 0.038 seconds, Fetched: 1 row(s)