SQL Server 分隔字符串函数实现

在SQL Server中有时候也会遇到字符串进行分隔的需求。平时工作中常常遇到这样的需求,例如:人员数据表和人员爱好数据表,一条人员记录可以多多人员爱好记录,而往往人员和人员爱好在界面展示层要一并提交入库的,至于实现该需求我大多采用两种方式:一种方式是代码先实现一条人员记录的添加或修改时,在数据访问层针对人员还好记录的循环添加或修改;还有一种通过存储封装,代码将选中的人员爱好记录标识键以分隔符连接起来作为字符串集,在存储过程中在分割字符串集,实现批量插入(注意:所举例说明有可能不完全妥当,如果博友指出不妥、错误以及建议,万分感谢)。

SQL Server分隔字符串函数实现,T-SQL代码如下:

 1 IF OBJECT_ID(N'[dbo].[ufn_SplitToTable]', N'TF') IS NOT NULL2 BEGIN3     DROP FUNCTION [dbo].[ufn_SplitToTable];4 END5 GO6  7 --==================================8 -- 功能:分隔关键字字串集插入数据表9 -- 作者: XXXX
10 -- 创建: XXXX-XX-XX
11 -- 修改: XXXX-XX-XX XX XXXXX
12 -- 调用:SELECT * FROM dbo.ufn_SplitToTable2('1|2|3','|')
13 --==================================
14 CREATE FUNCTION [dbo].[ufn_SplitToTable]
15 (
16     @chvnKeyWords NVARCHAR(4000),        -- 要分隔的关键字字符串集
17     @chvnSeparator NCHAR(1)                -- 要使用的分隔符,默认为'|'
18 ) RETURNS @tblResult TABLE (
19     Num INT IDENTITY(1, 1) NOT NULL,
20     Word NVARCHAR(200) NOT NULL
21 )
22     --$Encode$--
23 AS
24 BEGIN
25     -- 分隔符参数为NULL时则使用"|"
26     SET @chvnSeparator = ISNULL(@chvnSeparator, N'|');
27
28     DECLARE @intPos AS INT = 0;
29     SET @intPos = CHARINDEX(@chvnSeparator, @chvnKeyWords);
30
31     WHILE @intPos >= 1 /* @intPos > 0*/
32     BEGIN
33         IF @intPos >= 2 /*@intPos > 1*/
34         BEGIN
35             INSERT INTO @tblResult (Word)
36             VALUES (LEFT(@chvnKeyWords, @intPos - 1));
37         END
38
39         -- 也可以使用SUBSTRING字符串函数
40         --SET @chvnKeyWords = SUBSTRING(@chvnKeyWords, @intPos + 1, LEN(@chvnKeyWords) - (@intPos + 1) + 1);
41
42         SET @chvnKeyWords = STUFF(@chvnKeyWords, 1, @intPos, N'');
43         SET @intPos = CHARINDEX(@chvnSeparator, @chvnKeyWords);
44     END
45
46     IF @chvnKeyWords > N''
47     BEGIN
48         INSERT INTO @tblResult (Word)
49         VALUES(@chvnKeyWords);
50     END
51
52     RETURN;
53 END
54 GO

执行以上函数的T-SQL代码如下:

1 SELECT *
2 FROM dbo.ufn_SplitToTable(N'ab,bc,cc,bb,cd', N',');
3 GO

得到的查询结果如下:

像下面这样的T-SQL代码:

1 SELECT *
2 FROM dbo.ufn_SplitToTable(N',,1,2,3,6,8,,9,', ',');
3 GO

执行后的查询结果为:

注意:本版本的分隔字符串函数则对两个分隔符连接起来的没有任何字符的不做任何处理。

SQL Server 分隔字符串函数实现相关推荐

  1. SQL Server之字符串函数

    以下所有例子均Studnet表为例:   计算字符串长度 len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写 lower( ...

  2. SQL Server截取字符串函数操作

    1.SUBSTRING()函数 含义:从指定位置开始截取指定数量的字符. 使用:SUBSTRING(原字符,截取字符的起始位置,截取字符数量) 举例: 1.截取字符的起始位置是从1开始的,为0的话截取 ...

  3. sql中截取字符串函数_SQL Server 2017中的顶级SQL字符串函数

    sql中截取字符串函数 SQL Server 2017 has been in the talk for its many features that simplify a developer's l ...

  4. SQL 常用的字符串函数

    SQL 常用的字符串函数 1.replace:替换函数 replace(string,from_str,to_str) 即:将string中所有出现的from_str替换为to_str 2.left: ...

  5. SQL Server 2005 MD5函数

    原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的M ...

  6. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 问题 : 超时时间已到.在从池中获取连接之前超时时间已过.出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小. 解决办法 1. 在代码里面 ...

  7. SQL Server中替换函数stuff、replace的使用

    原文链接:SQL Server中替换函数STUFF.replace的使用 STUFF ( character_expression , start , length ,character_expres ...

  8. SQL Server中COALESCE函数的用法

    在SQL Server中COALESCE函数,会返回其参数中第一个不为NULL的参数,效果如下: SELECT COALESCE(NULL,NULL,N'A',NULL,NULL) 结果: SELEC ...

  9. SQL SERVER的quotename函数

    数据库:sql server2008 函数:quotename(字符串,'可选参数:添加在外层的字符') 作用:quotename函数,给字符外层添加[ ]括号,quotename函数看分隔符默认是[ ...

最新文章

  1. java hashmapconcurrentHashmap源理
  2. NO.72 参与项目管理、演示和总结
  3. 用了这个方法,我下载GitHub项目速度达5MB/s!
  4. 2021东京奥运会数据接口
  5. 最大功率点跟踪_ADI公司推出集成最大功率点跟踪和I2C的80V降压升压电池充电控制器...
  6. python实现RSA算法,对数据进行加密认证
  7. 轨迹跟踪主要方法_DELMIA教程:基于指令形式的机器人TCP轨迹局部跟踪方法
  8. 给力!一行代码躺赚普通程序员 10 年薪资!
  9. 【证明】—— 二叉树的相关证明
  10. 简单html源码_HTML 文本格式化
  11. FreeCAD源码分析: PartDesign模块
  12. 555低电平出发定时器
  13. 【好工具】强烈安利的文献管理软件 Mendeley
  14. Cadence OrCAD Capture 在图纸中添加系统框图的方法
  15. Unity使用BMFont制作字体
  16. scratch实现弹跳小球2
  17. 清除流氓软件的第一利器(IceSword)
  18. Python学习笔记(一)(图灵学院)
  19. 网络信息安全之安全风险管理
  20. C# 模拟鼠标点击(鼠标按键损坏,辅助工具)

热门文章

  1. Axure 8 鼠标悬停在菜单文字上时文字颜色改变
  2. 与时俱进的IFS,进击的IFS Applications 10
  3. ubuntu (20.04 LTS) 屏幕亮度调节无效解决方法
  4. mac OSX 实用快捷键
  5. Java三目运算符导致 NPE
  6. 新电脑主机声音好大为什么啊
  7. C语言练习题---初学者
  8. 《你的灯亮着吗?》阅读笔记
  9. php 正则表达式判断数字,php 正则表达式验证数字
  10. 【ppt幻灯片制作】Focusky教程 | 在Focusky中,录音生成的声音文件存放在哪里?