适用模块

SparkSQL

具体说明

SparkSQL函数使用

使用示例

[此链接为sparksql官方链接,包含所有函数使用]
(https://spark.apache.org/docs/latest/api/sql/ "此链接为sparksql官方链接,包含所有函数使用")

一、 字符串函数
1. 字符串截取
1.1 字符串截取之substring_index函数
substring_index(str,delim,count)
其中:str:要处理的字符串;delim:分隔符;count:计数

- count为正数的情况下,从左往右数,第count个分隔符的左边的全部内容
例子:str=www.baidu.com
substring_index(str,‘.’,1) 结果是:www
substring_index(str,‘.’,2) 结果是:www.baidu

- count为负数的情况下,从右往左数,第count个分隔符的右边的全部内容
例子:
substring_index(str,‘.’,-1) 结果是:com

- 如果想要中间的,则嵌套操作
例子:
substring_index(substring_index(str,‘.’,2),‘.’,-1) 结果是:baidu

1.2 字符串截取之substring函数和substr函数
substr(string A, int startint len),substring(string A, int start,int len) 两者用法一致
其中:A:处理的字符串;start:截取的开始位置(坐标从1开始)
len:截取的长度,若函数为两个参数,则默认截取到末尾。

例子:
select substring('abcdeffff',3);
+-----------------------------------+
|substring(abcdeffff, 3, 2147483647)|
+-----------------------------------+
|                            cdeffff|
|                            cdeffff|
+-----------------------------------+

select substring('abcdeffff',-1);
+------------------------------------+
|substring(abcdeffff, -1, 2147483647)|
+------------------------------------+
|                                   f|
|                                   f|
+------------------------------------+

select substring('abcdeffff',3,5);
+--------------------------+
|substring(abcdeffff, 3, 5)|
+--------------------------+
|                     cdeff|
|                     cdeff|
+--------------------------+

2. 字符串查找
    2.1 字符串查找函数之instr函数
instr(String str,string substr)
返回值:int(返回字符串substrstr中首次出现的位置,坐标从1开始)
例子:
instr('sbacba','ba') 结果是:2

    2.2 字符串查找函数之locate函数
locate(string substr, string str,[int pos])
返回值:int(返回字符串 substr  str 中从 pos 开始查找,首次出现的位置,坐标从1开始)
例子:
locate('a','abcda',1) 结果是:1
locate('a','abcda',2) 结果是:5

3. 字符串大小写转换函数
小写转为大写:UPPER(字段名)
大写转为小写:LOWER(字段名)

4. NVL函数
NVL(E1, E2)的功能为:如果E1NULL,则函数返回E2,否则返回E1本身。

二、转换数据类型函数
1. cast函数
castexpression as data_type
as:用于分隔两个参数,在as之前的是要处理的数据,as之后是要转换的数据类型。
Decimal不属于浮点类型,可以在定义时划整数部分以及小数部分的位数。
例子:
- cast('12' as int) 结果是:12

- cast('12.5' as int) 结果是:报错
原因:cast函数和convert函数都不能执行四舍五入或截断操作。由于12.5不能用int数据类型来表示,所以会报错。

- cast('12.5' as decimal(9,2)) 结果是:12.50
9是精度,总的数字位数,包括左边和右边位数的总和。
2是小数位数,是小数点右边的位数。

- cast('12.5' as decimal) 结果是:12
精度和小数位数默认值分别是180。如果在decimal类型中不提供这两个值,将截断小数部分,并不会像第二个例子一样报错。

三、数学运算
round 四舍五入
floor 取左值
ceil 取右值
例子:
select round(1.2356);
+----------------+
|round(1.2356, 0)|
+----------------+
|               1|
+----------------+

select round(1.6356);
+----------------+
|round(1.6356, 0)|
+----------------+
|               2|
+----------------+

select floor(1.2356);
+-------------+
|FLOOR(1.2356)|
+-------------+
|            1|
+-------------+

select floor(1.6356);
+-------------+
|FLOOR(1.6356)|
+-------------+
|            1|
+-------------+

select ceil(1.2356);
+------------+
|CEIL(1.2356)|
+------------+
|           2|
+------------+

select ceil(1.6356);
+------------+
|CEIL(1.6356)|
+------------+
|           2|
+------------+

round函数的语法是:ROUND(number,num_digits),即:ROUND(数值,保留的小数位数)
number:需要进行四舍五入的数字。
num_digits:指定的位数,按此位数进行四舍五入。
- 如果 num_digits 大于 0,则四舍五入到指定的小数位。
ROUND(3.19, 1)  3.19 四舍五入到一个小数位 (3.2)
ROUND(2.649, 1)  2.649 四舍五入到一个小数位 (2.6)
ROUND(-5.574, 2)  -5.574 四舍五入到两小数位 (-5.57)
- 如果 num_digits 等于 0,则四舍五入到最接近的整数。
- 如果 num_digits 小于 0,则在小数点左侧进行四舍五入。
ROUND(18.8, -1)  18.8 四舍五入到小数点左侧一位 (20)。这个参数-1表示取整到十位数。

持续更新中


作者:李云龙