字符串
concat(str1,str2) 字符串拼接
regexp_replace(string A, string B, string C) 字符串替换函数,将字符串A中的B用C替换。
repeat(string str, int n) 重复N次字符串
lpad(string str, int len, string pad)将字符串str用pad进行左补足到len位(rpad右补足)
trim(string A) 删除字符串两边的空格,中间的会保留。ltrim(string A) ,rtrim(string A)
if(boolean testCondition, T valueTrue, T valueFalseOrNull) ,根据条件返回不同的值
nvl(T value, T default_value) 如果T is null ,返回默认值
length(string A) 返回字符串A的长度
//不能使用?(
greatest(T v1, T v2, ...) 返回最大值,会过滤null
least(T v1, T v2, ...) 返回最小值,会过滤null
)
rand(), 返回0-1的随机值。rand(INT seed) 返回固定的随机值。
split(str, regex) ,安装规则截取字符串,返回数组
case when 条件then 为真的值 else 为假的值 end
日期
unix_timestamp() 获取当前日期
to_date(string timestamp) 将时间戳转换成日期型字符串
datediff(string enddate, string startdate) 返回int 的两个日期差
date_add(string startdate, int days) 日期加减
current_timestamp 和 current_date 返回当前时间戳,当前日期
date_format(date/timestamp/string ts, string fmt) 按照格式返回字符串
last_day(string date) 返回 当前时间的月末日期
窗口处理函数
1.
FIRST_VALUE、LAST_VALUE、SUM、MAX、MIN、RANK、DENSE_RANK、ROW_NUMBER、NTILE
RANK 当值相同排名是一样的,但是名次可能是不全的
ROW_NUMBER 当值相同排名会有先后
DENSE_RANK 当值相同排名是一样的,没有先后,名次是全的
2.
rows between ... and ... 窗口的划分 按照数据行划分窗口
UNBOUNDED PRECEDING 从当前行往前到头
UNBOUNDED FOLLOWING 从当前行往后到头
N PRECEDING 从当前行往前计算N条记录
N FOLLOWING 从当前行往后计算N条记录
CURRENT ROW 当前行
rows between UNBOUNDED PRECEDING and CURRENT ROW 往前从头到当前行的所有记录参与计算
rows between CURRENT ROW and UNBOUNDED FOLLOWING 从当前行到最后一行的所有记录参与计算
rows between 3 PRECEDING and 4 FOLLOWING 从当前行往前三行往后四行的记录参与计算
如果有ORDER BY 则rows between默认是:RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
如果没有ORDER BY 则rows between默认是:ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED
3.order by 排序条件
4.group by str1,str2 grouping sets((str1,str2),str1,str2,())
相当于四条sql 求2个条件下分组,一个条件为空,两个全部为空(全部)