1.取随机数

rand()可以取到0-1之间的随机数,里面也可以随便设立一个种子,如rand(10),这时无论你输入多少次rand(10)都会到的一个稳定的0-1的随机数序列。

2.分割字符串

这个和java中的分割一样,是split,不过不同的是这里语法为split(str,分隔符),返回的也是一个array数组,同样可以通过数组下标来取值。

3.字符串截取函数

和java中substring用法类似,这里语法是substr(str,start)或substr(str,start)从start下标位置截到尾部。还有substring(str,start,length)或substr(str,start,length)从start下标位置截取length长度。

4.if函数

语法:if(boolean testCondition, T valueTrue, T valueFalseOrNull) 意思是if函数里有三个参数,第一个为判断条件返回boolean类型,第二个参数为boolean为true时返回的值,第三个参数为false时返回的值。

5.case函数

例如:

select
			case c.flag
			when 1 then "100"
			when 2 then "200"
			when 3 then "300"
			when 4 then "400"
			else "others"
			end
			from cw;

和java中case条件判断语句大致相同。

6.正则表达式替换函数

语法:regexp_replace(string A,string B,string C) 该函数是字符串A满足正则表达式B的部分替换为C。

7.类型转换函数

这个直接用例子来说明吧。

select cast("12" as int);

cast里as前填需要转换类型的数据,as后填转换为的类型。

8. 字符串连接函数

concat(string A,string B,string C…) 可以将它拼接为ABC。意思是就可以将括号内的多个字符连接在一起。
concat_ws(string sep,string A,string B,string C…) 可以在拼接在一起的基础上,将各个字符串用sep来隔开。

9.开窗函数

开窗函数就是创造出一个伪列,我们可以对这个伪列来进行操作。
这里主要讲解一下开窗函数中使用最多的排名。分为三种:1.row_number()over(partition by field1 order by field2 ) 根据filed1来进行分区,再根据field2来排序,可以设置desc来倒序排。它是尽管field2的值相同的话,排名也是递加的。
2.rank()over(partition by field1 order by field2 ) 用法相同,但是它是field2有几个值并列相等的话,当出现不同的时,名次会变为前面并列的个数+并列的名次+1。
3.dense_rank()over(partition by field1 order by field2 ) 用法同样相同,它与rank不同的是,它不会跳跃名次,它是前面并列的名次+1。

10.聚合函数

聚合函数有min(),max(),count(),count(distinct),sum(),avg()。用法很常规,这里就不介绍了,但有个需要注意的点是聚合函数不能在having后面使用,但是可以在where后使用。

11.避免空值

在我们在实现业务时,经常会发现有时候字段为null值,但是null值和其它数值来进行操作都只会返回null,这时我们要进行避免空值处理,可以使用coalesce函数,里面可以把可能出现空值的字段放在前面,然后后面放0。这样如果取到第一个参数为null的话,他就会取0,如果第一个参数不为null,就不会取到第二个参数的值。

12.行转列

以下面例子来讲:

select user_id,concat_ws(' ',collect_set(concat(app_id,':',app_name))) as value from  user_app_install  group by user_id

按照用户的id进行分组,然后将分组后的用户每条数据中的app_id和app_name用冒号拼接,然后用空格将其隔开。

附加一些小玩意:
from_unixtime(unix_timestamp(),‘yyyy-MM-dd HH:mm:ss’) 取当前时间
from_unixtime(unix_timestamp(dt,‘yyyymmdd’),‘yyyy-mm-dd’) 可以将yyyymmdd格式的时间转为yyyy-mm-dd时间格式
hour(string date)可以根据输入的时间格式的字符串取出对应的小时