1.日期函数
--当前时间
select current_date();
--格式转换
select from_unixtime(1586158716,'yyyyMMdd');
--转unix时间戳
select unix_timestamp('2020-04-06 15:38:36','yyyy-MM-dd HH:mm:ss');
--当前时间
select from_unixtime(unix_timestamp());
--当前日期
select to_date(from_unixtime(unix_timestamp()));
--获得月份
select month('2020-04-01');
--获得年
select year('2020-04-01');
--一年中第几周
select weekofyear('2020-04-06');
--日期加减
select datediff('2020-04-06','2020-04-05');
select date_add('2020-04-06',1);
date_sub()
--当月最后一天
last_day()
--按照格式返回字符串
select date_format('2020-04-06','yyyyMMdd');
2.数值计算
--取整/指定精度取整
select round(3.1415926,2);
floor——向下取整
ceil——向上取整
abs——绝对值
--随机数
select rand();
--取余
select pmod(13,3);
3.字符串处理
--长度
select length('asdf');
--截取
select substring('asdf',1,2);
--拼接
select concat('eng','lish');
--分隔符拼接
select concat_ws(',','a','b','c');
--去掉前后空格
select trim(' asdf');
--拆分,返回数组
select split('a,b,c,d,1,2,3',',');
--解析url
select parse_url('https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu','QUERY');
--获取hash
select hash('恶魔猎手');
4.统计函数
count()
sum()
avg()
--列转一行
collect_set()
collect_list()
--分组排序
row_number()
rank()
dense_rank()
--小于等于当前值的行数/分组内总行数
cume_dist()
--组内当前行rank-1/分组内总行数-1
percent_rank()
--往前第几行的值
lag()
--往后第几行的值
lead()
--窗口范围
over()
--组内第一行到当前行
sum(pv) over(partition by cookieid order by createtime) as pv1
--组内第一行到当前行
sum(pv) over(partition by cookieid order by createtime between unbounded preceding and and current row) as pv2
--当前行到组内最后行
sum(pv) over(partition by cookieid order by createtime between current row and and unbounded following) as pv3
--组内前一行到组内后三行
between 1preceding and 3 following
5.关系运算
--匹配符
select 'aaacjasdf' like '___cj%';
--正则
select '2314' rlike '\\d+';
select '123' regexp('\\d+');
--正则替换
select regexp_replace('asdf1234qwer', '\\d+', 'x');
--正则解析
select regexp_extract('https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu', 'rsv_bp=([0-9])(&)', 2);
这个例子举得不太好感觉
6.json处理
get_json_object()
json_tuple()
7.复合类型构造函数
map(k1,v1,k2,v2...)
select struct(1,'cj',27);
array(1,2,3)
8.其他常用函数
nvl()——空则赋X值
coalesce()——返回第一个非空
explode()——eg:split生成数组,把数组中每个元素拿出来作为一行
lateral view——侧视图
lateral view explode(split()) 虚拟视图名 as 列名
eg:一名老师对应一个学科列表,把学科subject[1101,1102,1103]拆成多行的形式,即一位老师有多行数据
select teacher_id,subject_1 from table_name lateral view explode(split(subject,',')) a as subject_1;