hive【三】常用内置函数 ++求给定日期是星期几
hive常用内置函数
字符函数
| 字符函数 | 作用说明 |
|---|---|
| concat() | 拼接 |
| instr() | 找字符串所在位置,如instr(‘abcd’,‘cd’),返回结果为3,即cd位置处于第三位 |
| locate () | 找字符串所在位置,与instr相似,不同的是指定查找内容放在前面,如 locate(‘cd’,‘abcdefg’),返回结果为3,即cd所在位置是第三位; 如果后面加数字表示从第几位开始查找,如locate(‘cd’,‘abcdefgcd’,4),返回结果为8,表示从第4位开始查找cd所在位置 |
| length() | 字符串长度 |
| upper() | 字符全部返回为大写 |
| lower() | 字符全部返回为小写 |
| regexp_replace() | 正则替换,经常使用,下面重点举例说明 |
| split () | 字符分割为数组 |
| substr() | 截取字符串 与java中的substring类似,如substr(‘1999-5-6 12:32:34’,1,8),返回结果为1999-5-6 |
| trim() | 去除字符前后空格 |
| ltrim() | 去除字符左边空格 |
| str_to_map() | 将字符串分割为map格式 |
| encode() | 转换字符编码,如encode(‘你好’,‘utf-8’),返回中文的‘你好’ |
| reverse | 字符反转 |
| regexp_extract() | 分组截取字符串,下面举例说明 |
| format_number() | 返回数字格式字符串,如(1232.456,2),返回结果为(1232.47),四舍五入保留两位小数; 如果后面不写保留位数,则返回四舍五入的整数 |
| get_json_object() | 取某json格式的某个对象,如get_json_object(’{“name”:“zs”,“age”:“25”}’,’$.name’),返回结果为zs,格式仿照 |
| lpad() | 向左用符号补齐目标长度,如lpad(‘abcd’,6,’#’),返回结果为##abcd,即用符号#在字符左侧补齐总长度为6; 若长度不够相当于截取,如lpad(‘abcd’,2,’#’),返回结果为ab |
| parse_url | 拿域名,parse_url(‘http://www.baidu.com’,‘HOST’),返回www.baidu.com |
| initcap() | 首字母大写 |
regexp_replace()
正则匹配替换
😬栗子:1.将1995/5.6中的字符’/‘和’.'转换为‘-’,即1995-5-6格式

2.将1995-5-6 13:24:56.234中的毫秒数‘234’去除
方法1:正则匹

方法2:split分割

regexp_extract()
分组截取
😁举个栗子:将字符日期“1999-5-6 13:34:56.0001”中的时分秒取出来

数学函数
| 数学函数 | 作用说明 |
|---|---|
| round() | 保留几位小数,不写表示只保留整数 |
| floor() | 取整数 |
| ceil() | 向上取整 |
| rand() | 随机数 |
| pow() | 次方,pow(10,2)表示10的平方 |
| sqrt() | 开根号,负数不能开根号返回结果为null |
| pmod() | 取模(取余) |
| cast() | 乱入乱入,类型转换函数,cast(“123” as string)+123 返回结果246 |
求给定日期是星期几
pmod(datediff(‘日期’, ‘任意年任意一个星期日的日期’), 7)
思路:除以7去余数,得到星期数,注意返回值是0~6,0是星期天
日期函数
from_unixtime()
时间转换格式,将时间转换为yyyy-MM-dd hh:mm类似格式,如:from_unixtime(1250234124)
返回: 2009-08-14 15:15:24
若在其中加时间格式,则返回对应时间格式,如from_unixtime(1250234124,‘yyyy-MM-dd’)
返回:2009-08-14
unix_timestamp()
时间戳,内容为空时,返回当前时间的时间戳,输入时间则显示输入时间时间戳
to_date() 转换时间为日期的标准格式
year/ month/ day /weekofdate 年分日 周
current_date() 当前日期标准格式
datediff()
日期差
datediff(current_date,‘1997-08-08’)
返回结果为8347,通过日期差看看自己存在的天数很有意思😁
date_add()
日期加天数
如:date_add(current_date(),2)
表示当前日期加2天
date_sub()
日期减天数
如:date_sub(current_date(),2)
表示当前日期减2天
add_months()
日期加月数
如:add_months(current_date(),7)
表示当前日期加7个月
last_day()
返回该月的最后一天
如:last_day(current_date())
表示当前月的最后一天
next_day()
返回下个星期几的日期
next_day(current_date(),‘MON’)
表示当前时间的下个星期一的日期
条件函数
| 条件函数 | 作用说明 |
|---|---|
| if(boolean testCondition, T valueTrue, T valueFalseOrNull) | 如果testCondition 为true就返回valueTrue,否则返回valueFalseOrNull |
| nvl(T value, T default_value) | value为NULL返回default_value,否则返回value |
| COALESCE(T v1, T v2, …) | 返回第一非null的值,如果全部都为NULL就返回NULL |
| CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END | 如果a=b就返回c,a=d就返回e,否则返回f |
| CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END | 如果a=ture就返回b,c= ture就返回d,否则返回e |
| isnull( a ) | 如果a为null就返回true,否则返回false |
| isnotnull ( a ) | 如果a为非null就返回true,否则返回false |
表生成函数
| 表生成函数 | 作用说明 |
|---|---|
| explode() | 列转行,如explode(spilt(‘hellom,world’),’,’) |
| stack(INT n, v_1, v_2, …, v_k) | 把k列转换成n行,每行有k/n个字段,其中n必须是常数 |
更多推荐
所有评论(0)