SQL如何提取字符串中的字母?
我们在进行数据处理时,可能经常需要对不同类型的字符进行抽取。比如一些产品型号,批次之类的会使用字母表示,这个时候该如何提取这些数据呢?
- 作者:丶平凡世界来源:SQL数据库开发|2021-01-09 23:11
问题描述
我们在进行数据处理时,可能经常需要对不同类型的字符进行抽取。比如一些产品型号,批次之类的会使用字母表示,这个时候该如何提取这些数据呢?
问题分析
不管是字母,还是数字,我们都可以使用相应的匹配规则来抽取出来。但是由于字母是混合在字符串中,我们需要循环对其进行匹配。
具体解法
我们创建一个函数,通过调用这个函数来找出所有的字母。
- CREATE FUNCTION dbo.GET_LETTER (@Str VARCHAR(100))
- RETURNS VARCHAR(100)
- AS
- BEGIN
- WHILE PATINDEX('%[^a-z]%', @Str) > 0
- BEGIN
- SET @Str = STUFF(@Str, PATINDEX('%[^a-z]%', @Str), 1, '');
- END;
- RETURN @Str;
- END;
- GO
代码解读
上面的解法主要使用了两个函数,PATINDEX函数和STUFF函数
PATINDEX函数
PATINDEX ( '%pattern%' , expression )
返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。
例如
- SELECT PATINDEX('%SQL%','SQL数据库开发')
结果:
因为SQL就在第一位,所以返回结果为1
STUFF函数
STUFF ( expression1 , start , length ,expression2 )
字符串expression1 从start位置开始,删除长度为length的字符后,在start后面填充expression2。
例如
- SELECT STUFF('SQL,开发',4,1,'数据库')
结果:
上面的示例是将","删除后,替换成了"数据库"
测试函数
理解完上面的函数,我们来测试一下我们自定义的函数GET_LETTER ()
- SELECT dbo.GET_LETTER('SQL数1据2库3开4发road')
结果:
这与我们预期的结果一致,证明这个自定义函数是可行的。
觉得不错,欢迎转发分享给更多人,让有需要的人也看到。
【编辑推荐】
【责任编辑:华轩 TEL:(010)68476606】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 使用MySQL命令行修改密码MySQL时间格式化四种优秀的数据库设计工具14个必须掌握的数据库面试题(附答案)MySQL update 语句的正确用法记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案Java连接MYSQL 数据库的连接步骤DB-Engines 3 月数据库流行度排行:SQL Server 分数暴跌
- 使用MySQL命令行修改密码MySQL时间格式化四种优秀的数据库设计工具MySQL update 语句的正确用法记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案不会MySQL索引,面试官让回家等通知!14个必须掌握的数据库面试题(附答案)MySQL分库分表,写得太好了!
- 使用MySQL命令行修改密码四种优秀的数据库设计工具MySQL时间格式化记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案MySQL update 语句的正确用法MySQL分库分表,写得太好了!不会MySQL索引,面试官让回家等通知!MySQL 8.0不讲武德,给我挖坑!
订阅专栏+更多
-
数据湖与数据仓库的分析实践攻略
助力现代化数据管理:数据湖与数据仓库的分析实践攻略共3章 | 创世达人1人订阅学习
-
云原生架构实践
新技术引领移动互联网进入急速赛道共3章 | KaliArch30人订阅学习
-
数据中心和VPDN网络建设案例
漫画+案例共20章 | 捷哥CCIE209人订阅学习
视频课程+更多
-
AD活动目录管理 - 理论与实战
讲师:杰森洋58652人学习过
-
网工教会你思科华为系列(1)-基础交换技术篇
讲师:吴忠捷698人学习过
-
鸿蒙手机应用开发入门(Java)
讲师:钟洪发1264人学习过
专题推荐+更多
- 精选博文
- 论坛热帖
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO官微