当前位置: 首页 > news >正文

【Spark SQL】文本函数及业务场景使用

字符串处理方式

  1. 基本操作
函数函数含义举例结果
isnull()判断是否为null值true/false
isnotnull()判断是否非null值true/false
ifnull(expr1, expr2)判断null值并替换null值A=null B=1 if(A,B)1
coalesce(expr1, expr2, …)返回第一个非null值的值A=null B=1 C=1 coalesce(A,B,C)1
length()返回字符串的长度length(‘woshi wo’)8
initcap()将英文字符串转为首字母大写initcap(‘woshi wo’)Woshi Wo
lcase()/lower()将英文字符串转为小写lcase(‘ABC’); lower(‘ABC’)abc
ucase()/upper()将英文字符串转为大写ucase(‘abc’); upper(‘abc’)ABC
reverse()将字符串反转reverse(‘123’)‘321’
string()将其他类型转换为字符串string(123)‘123’
cast( expr as string)将其他类型转换为字符串cast(123 as string)‘123’
  1. 字符串查找
函数函数含义举例
locate(‘需要查找的字符串’, ‘被查找字符串’,‘查询的起始位置(选填)’)返回第一次匹配到的字符串所在位置locate(‘w’,‘qoeqrwe2w123’)=6 locate(‘w’,‘qoeqrwe2w123’,5)=6 locate(‘w’,‘qoeqrwe2w123’,7) =9
instr( ‘被查找字符串’,‘需要查找的字符串’)返回第一次匹配到的字符串所在位置instr(‘Wanni’,‘n’)=3
find_in_set(str, str_array) 被查询字符串是以逗号隔开的字符串。返回第一次匹配到的字符串所在位置find_in_set(‘ab’,‘abc,b,ab,c,def’)=3
find_in_set(str, str_array) 被查询字符串是以逗号隔开的字符串。返回第一次匹配到的字符串所在位置find_in_set(‘ab’,‘abc,b,ab,c,def’)=3
like模糊匹配指定模式的字符串,返回 true/false。需结合通配符使用(‘wAn’ like ‘A’ )=true
rlike模糊匹配指定模式的字符串,返回 true/false。需结合正则表达式使用(‘ssssqw100ml’ elike ‘\d’ )=false
  1. 字符串截取、替换、分割和拼接
用途函数举例
字符串截取,截取长度[, len]省略时截取指定位置开始的所有字符substr(str, pos[, len]) ;substring(str, pos[, len]) substring(‘123abcABC’, 2, 3)=23a; substr(‘Spark SQL’, -3)=SQL
返回字符串中在第 n 个出现的分隔符之前的子串。n 是负数时,返回从右边开始第 -n 个分隔符到右边所有字符。substring_index(str, delim, n)substring_index(‘a.b.c.d.e’, ‘.’, 2)=a.b; substring_index(‘a.b.c.d.e’, ‘.’, -2)= d.e
从左侧开头处截取固定长度字符串left(str, len)left(‘Spark SQL’, 3)=Spa
从右侧结尾处截取固定长度字符串right(str, len)right(‘Spark SQL’, 3)=SQL
移除字符串开头(左侧)的空格ltrim(str) ;trim(LEADING FROM str) ltrim(’ Spark SQL’)=Spark SQL
移除字符串结尾(右侧)的空格rtrim(str) ;trim(TRAILING FROM str) rtrim('Spark SQL ')=Spark SQL
移除字符串开头和结尾(左右两侧)的空格 trim(str) ;trim(BOTH FROM str)trim(’ Spark SQL ')=Spark SQL
移除字符串开头和结尾(左右两侧)的指定字符trim(trimStr FROM str) 移除两侧; trim(LEADING trimStr FROM str) 移除左侧;trim(TRAILING trimStr FROM str) 移除右侧 trim('’ from ‘ABC**’)=ABC
替换所有匹配到的字符。[, replace]省略时移除所有匹配到的字符。replace(str, search[, replace])replace(‘ABCabc’, ‘abc’, ‘DEF’)=ABCDEF
多字符替换。针对input,将from中的每个字符替换为to中相应字符。若from比to字符串长,在from中比to中多出的字符将会被删除。translate(input, from, to)translate(‘AaBbCc’, ‘abc’, ‘123’)=A1B2C3; translate(‘AaBbCc’, ‘abc’, ‘12’)=A1B2C
替换固定位置字符,可指定替换长度overlay(input, replace, pos[, len])overlay(‘Spark SQL’ ,‘tructured’ ,2,4)=Structured SQL;overlay(‘Spark SQL’ PLACING ‘tructured’ FROM 2 FOR 4)=Structured SQL
正则匹配替换所有匹配到的字符regexp_replace(str, regexp, rep)REGEXP_REPLACE(‘A1B2C3**’,‘[\d*]’,‘’) =‘ABC’
以单个或多个字符分割字符串, 返回数组。分隔符支持正则表达式,limit控制分割后元素数,省略时代表全部分割split(str, regex, limit) split(‘A1B2C’,‘\d’)=[A, B, C];split(‘A1B2C’,‘\d’,2)=[A, B2C]; split(‘A-B-C’,‘-’)= [A, B, C]
字符串拼接concatconcat(‘Spark’, ‘SQL’)=SparkSQL
字符串拼接expr1 丨丨expr2Spark’ 丨丨 ‘SQL’=SparkSQL
用分隔符拼接字符串或数组concat_ws(sep[, strarray(str)]+)
返回字符串重复对应数值次数后的新字符串repeat(str, n)repeat(‘ABC’, 2)=ABCABC

业务场景

商品名称里包含了规格,需要解析出规格用于匹配
示例:

商品名称sku需要获取的规格
xx清透沐浴露沐浴洗澡女夏500mlEsjw1k500ml
xx清透沐浴露沐浴2135洗21澡男夏300MLEsjw1k300ml

解决sql:

# LOWER() 转换小写
# REGEXP_SUBSTR(字段, 正则表达式)  查找符合正则表达式的值
select CASEWHEN LOWER(商品名称 ) LIKE '%ml%' THENREGEXP_SUBSTR(LOWER(商品名称 ), '[0-9]+(?=ml)') || 'ml'ELSENULLEND as `需要获取的规格` from table

http://www.mrgr.cn/news/52314.html

相关文章:

  • 手撕数据结构 —— 堆(C语言讲解)
  • 关闭cloud tts
  • 范数,L2范数标准化,及其用法和意义
  • 闯关leetcode——111. Minimum Depth of Binary Tree
  • 【python爬虫实战】爬取全年天气数据并做数据可视化分析!附源码
  • 【MySQL】表的修改操作,插入查询结果
  • python爬虫实战案例——从移动端接口抓取微博评论,采用cookie登陆,数据存入excel表格,超详细(15)
  • 精英高匿ip的自述
  • PyQt5高级界面控件一
  • Java中使用protobuf
  • 江大白 | 目标检测YOLOv1-YOLO11,算法进化全记录(建议收藏!)
  • 双十一来袭,哪款宠物空气净化器值得入手?好用的宠物空净推荐
  • Redis-1
  • 每日OJ题_牛客_连续子数组最大和_线性dp_C++_Java
  • oracle 19c 配置开机自启动
  • 系统思考—战略共识
  • 10.17作业
  • 多态底层原理【附原理模型图】
  • 学习之上下文管理器
  • 提供综合康复服务的武汉自闭症全托管学校