SQL Server中自定义函数:用指定的分隔符号分割字符串

article/2025/9/24 0:33:25

微软SQL Server数据库中包含了很多内置的函数,入下图:
在这里插入图片描述
在这里插入图片描述
它们用于处理日期、数学、元数据、字符串等。

其中最为常用的就是处理字符串,里面包含了CharIndex()等函数,非常方便使用。

但是对于特殊字符串的处理,比如:ISBN号 ‘978-7-5007-7234-7’,如果想获取第三个与第四个分割符号之间的数字,

那么SQL 内置函数无法直接做到。这时就需要自定义函数。下面自定义三个函数,用于处理特殊的字符串。

一、按指定符号分割字符串,返回分割后的元素个数

ALTER FUNCTION [dbo].[Fun_GetStrArrayLength]
(@originalStr VARCHAR(1024),    --要分割的字符串@split       VARCHAR(10)       --分隔符号
)
RETURNS INT
AS
BEGINDECLARE @location INT;  --定义起始位置DECLARE @start INT;     --定义从第几个开始DECLARE @length INT;    --定义变量,用于接收计算元素的个数SET @originalStr = LTRIM(RTRIM(@originalStr));    --去除字符串左右两侧的空格SET @location = CHARINDEX(@split, @originalStr);  --分割符号在字符串中第一次出现的位置(索引从1开始计数)SET @length = 1;WHILE @location <> 0BEGINSET @start = @location + 1;SET @location = CHARINDEX(@split, @originalStr, @start);SET @length = @length + 1;ENDRETURN @length;
END

调用函数:select dbo.Fun_GetStrArrayLength('978-7-5007-7234-7','-')
结果:5

二、按指定符号分割字符串,返回分割后指定索引的第几个元素,像数组一样方便

ALTER FUNCTION [dbo].[Fun_GetStrArrayStrOfIndex]
(@originalStr     VARCHAR(1024),  --要分割的字符串@split           VARCHAR(10),    --分隔符号@index           INT             --取第几个元素
)
RETURNS VARCHAR(1024)
AS
BEGINDECLARE @location INT; --定义第一次出现分隔符号的位置DECLARE @start INT;    --定义开始位置DECLARE @next INT;     --定义下一个位置DECLARE @seed INT;     --定义分割符号的长度SET @originalStr = LTRIM(RTRIM(@originalStr));    --去除字符串左右2侧空格SET @start = 1;SET @next = 1;SET @seed = LEN(@split);SET @location = CHARINDEX(@split, @originalStr);  --第一次出现分隔符号的位置WHILE @location <> 0AND @index > @nextBEGINSET @start = @location + @seed;SET @location = CHARINDEX(@split, @originalStr, @start);SET @next = @next + 1;ENDIF @location = 0BEGINSELECT @location = LEN(@originalStr) + 1;END--存在两种情况:--1、字符串不存在分隔符号。--2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。RETURN SUBSTRING(@originalStr, @start, @location -@start);
END

调用函数:select dbo.Fun_GetStrArrayStrOfIndex('978-7-5007-7234-7','-',4)

结果:7234

三、像数组一样遍历字符串中的元素

ALTER FUNCTION [dbo].[Fun_SplitStr]
(@originalStr      VARCHAR(8000), --要分割的字符串@split varchar(100)              --分隔符号
)
RETURNS @temp TABLE(Result VARCHAR(100))
AS
BEGINDECLARE @result AS VARCHAR(100);   --定义变量用于接收单个结果 SET @originalStr = @originalStr + @split ;  WHILE (@originalStr <> '')BEGINSET @result = LEFT(@originalStr, CHARINDEX(@split, @originalStr, 1) -1) ;  INSERT @temp VALUES(@result) ;  --STUFF()函数用于删除指定长度的字符,并可以在指定的起点处插入另一组字符。SET @originalStr = STUFF(@originalStr, 1, CHARINDEX(@split, @originalStr, 1), '');END RETURN
END

调用示例:select * from dbo.Fun_SplitStr('978-7-5007-7234-7','-')

结果:

9787500772347

http://chatgpt.dhexx.cn/article/aKL0sfwy.shtml

相关文章

python的分隔符_python分隔符

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 1.split不支持同时使用多种字符做分隔符,如果想实现这样的效果,可以用re,例如:s=hello! this?is!what?i! want>>>shello! this?is!what?i! wan…

怎么根据分隔符号将Excel数据换行复制

今天跟大家分享一下怎么根据分隔符号将Excel数据换行复制 1.如下图我们想要将左边数据根据分隔符号“/”&#xff0c;将表格转为右边那样。 2.首选选择D3单元格 3.然后点击下图选项&#xff08;Excel工具箱&#xff0c;百度即可了解详细下载安装信息&#xff0c;本文这里就不做…

mysql中如何将存在分隔符号的一列进行拆分,成为多行

mysql中如何将存在分隔符号的一列进行拆分&#xff0c;成为多行 -- ****************************** 写在前面的说明 ********************************** /* student 为 上面左图的表名&#xff0c;表内字段名称见上图&#xff1b; 1.一个中文符号或者文字长为3&#xff0c;一…

「Python编程规范」语句分隔符号

功能要求 在Python中使用语句分隔符号“;”&#xff0c;在一行代码中编写多条语句。 实例代码 print(100);print(23) 运行结果 知识说明 print(100);print(23)&#xff1a;print(100)和print(23)分别是两条语句&#xff0c;但这两条语句编写在同一行代码中&#xff0c;中间…

wps怎么删除分隔符号 分栏

这时我们就可以看到所插入的分节符了。如要删除先将光标定位到分隔符前面&#xff0c;按Delete即可删除。

Java入门(一)java中的分隔符号

一直想自己学着写点东西&#xff0c;就趁着寒假写个简单的java入门&#xff0c;当时学校发的教材《java应用开发与实践》这本书作为小白入门就足够了 所以我准备按着这本书的目录顺序来写。&#xff08;如果是大学生然后只是为了应付考试&#xff0c;学校配的书看了就绰绰有余…

文件分隔符 ‘/‘(斜杠) 和 ‘\‘(反斜杠) 的使用

前言 在学习时&#xff0c;总会用到 Windows 和 Linux &#xff0c;输入路径时&#xff0c;文件路径分隔符有时用 ‘\’&#xff08;斜杠&#xff09;&#xff0c;有时用 ‘/’&#xff08;反斜杠&#xff09;&#xff0c;属实不好区分&#xff0c;故作此篇。 在 Windows 操作…

IIS6+PHP5 内存位置访问无效

在PHP5.2.4中加载php_sqlite.dll时忘记加载php_pdo.dll文件&#xff0c;运行phpinfo()函数时提示内存位置访问无效。去掉";extensionphp_pdo.dll"前面的分号&#xff0c;重新启动w3svc&#xff0c;问题解决。 如果在php.ini文件中设置display_startup_errors On&…

计算机内存管理之内存访问

文章目录 一、设备I/O内存访问ioremap & ioremap_nocacheioremap_cachedioremap_wc & ioremap_wtI/O内存访问流程 二、设备地址映射到用户空间mmap过程 三、devmem原理“/dev/mem”设备devmem命令原理 四、malloc原理malloc的工作原理缺页中断malloc的free 一、设备I/O…

0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法(内存对齐)

0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法(内存对齐) 顺带总结相关的内存问题&#xff1a; 1&#xff09;写入位置发生冲突(内存对齐造成) 2&#xff09;delete造成的this->0xFFFFFFFF内存问题链接 其它的话&#xff0c;由于当时项目测试忘了截图只能口述…

内存访问冲突问题(非法内存访问)

无独有偶&#xff0c;我居然又碰上了同样的问题。 原因跟之前一样&#xff0c;对象在内存中已经被销毁&#xff0c;或者这个对象压根就没有被创建过。 慢慢的查找p_Screen在哪里被复制以及在哪里被销毁&#xff0c;最有效的方法就是看函数调用栈。 当我把断点设置在p_Screen赋值…

访问固定的内存位置(Accessing fixed memory locations)

背景 如果有学过汇编&#xff0c;那么访问内存将不是一件难事&#xff0c;因为汇编要求你熟悉每一个内存模块&#xff0c;每一个内存地址。我记得当初上汇编的第一节课&#xff0c;老师就说汇编如果不懂的&#xff0c;直接debug那个地址&#xff0c;在命令控制台里找出那个地址…

访问非法内存为什么不会出错?

大家好&#xff0c;我是杂烩君。 上篇文章分享几个实用的代码片段&#xff08;第二弹&#xff09;我们分享了一段代码&#xff1a; 有位读者在朋友圈评论我的文章&#xff1a;&#xff08;type * &#xff09;0不是指向空地址吗&#xff1f;&#xff08;type*&#xff09;0->…

关于ImportError: DLL load failed: 内存位置访问无效的解决方案

一、首先确定import XXX哪个出错了。我的是import ibm_db出错了&#xff01; 二、cmd&#xff0c;输入 pip uninstall ibm_db&#xff0c;先是删除这个驱动包&#xff01;前提是你必须安装pip&#xff0c;如果没有安装命令不能识别。 三、删除成功后&#xff0c;输入 pip ins…

MUI框架详解-全面讲解MUI框架使用

课程目录&#xff1a; 01MUI 介绍、新项目创建、 基础布局.mp4 02MUI - accordion&#xff08;折叠面板&#xff09;、button.mp4 03MUI - actionsheet&#xff08;操作表&#xff09;、badge.mp4 04MUI - 复选框、单选框、使用js获取选择值.mp4 05MUI - datepicker&#xff08…

腾讯开源的Android UI框架——QMUI Android

各位同学&#xff0c;早上好&#xff0c;我是你们的老朋友D_clock爱吃葱花&#xff0c;前些天忙着发版本&#xff0c;最近也在看各种各样的新知识&#xff0c;有好多东西想写啊啊啊啊啊。嗯&#xff0c;先冷静捋一下&#xff0c;卖个关子。扯回正题&#xff0c;今天继续为大家推…

vue开发移动端,mui框架的各种使用方法

前面提到使用vue开发APP&#xff0c;自己不太熟悉&#xff0c;后来了解到有这个mui框架&#xff0c;然后改变状态栏颜色和监听返回键也是使用的这个框架&#xff0c;后来又遇到了一些问题&#xff0c;但是官网没有写操作方法&#xff08;也许是没找到&#xff09;&#xff0c;后…

Android原生集成MUI框架进行混合开发

开发APP中我们经常进行原生结合H5进行混合开发&#xff0c;下面将进行详细讲解Android原生集成MUI框架进行混合开发&#xff08;项目Demo如下&#xff0c;有需要的可以下载查看&#xff09;&#xff0c;下一篇讲述&#xff0c;Android原生和MUI&#xff08;也适合H5与原生交互&…

MUI 前端框架体验

前端框架有很多&#xff0c;在做混合开发APP 时&#xff0c;MUI 的UI 看起来更像原生APP&#xff0c;所以就选择MUI 来体验一下。 1 首先下载 安装 HBuilder X 2 创建并选择5app 项目 3.比较关键的index页面 Markup <!DOCTYPE html> <html> <head><me…

Android引入QMUI框架

前言 作为一个JAVA后端开发&#xff0c;学习Android开发&#xff0c;Android原生UI控件样式单一&#xff0c;简单&#xff0c;下面考虑引入UI框架QMUI。具体步骤如下&#xff1a; 一、创建一个Empty项目 二、打开QMUI官网查看相关步骤(对新手很不友好) https://qmuiteam.com…