SQL Server 分隔字符串函数实现
在SQL Server中有时候也会遇到字符串进行分隔的需求。平时工作中常常遇到这样的需求,例如:人员数据表和人员爱好数据表,一条人员记录可以多多人员爱好记录,而往往人员和人员爱好在界面展示层要一并提交入库的,至于实现该需求我大多采用两种方式:一种方式是代码先实现一条人员记录的添加或修改时,在数据访问层针对人员还好记录的循环添加或修改;还有一种通过存储封装,代码将选中的人员爱好记录标识键以分隔符连接起来作为字符串集,在存储过程中在分割字符串集,实现批量插入(注意:所举例说明有可能不完全妥当,如果博友指出不妥、错误以及建议,万分感谢)。
IF OBJECT_ID(N'[dbo].[ufn_SplitToTable]', N'TF') IS NOT NULL
BEGIN
DROP FUNCTION [dbo].[ufn_SplitToTable];
END
GO --==================================
-- 功能:分隔关键字字串集插入数据表
-- 作者: XXXX
-- 创建: XXXX-XX-XX
-- 修改: XXXX-XX-XX XX XXXXX
-- 调用:SELECT * FROM dbo.ufn_SplitToTable2('1|2|3','|')
--==================================
CREATE FUNCTION [dbo].[ufn_SplitToTable]
(
@chvnKeyWords NVARCHAR(4000), -- 要分隔的关键字字符串集
@chvnSeparator NCHAR(1) -- 要使用的分隔符,默认为'|'
) RETURNS @tblResult TABLE (
Num INT IDENTITY(1, 1) NOT NULL,
Word NVARCHAR(200) NOT NULL
)
--$Encode$--
AS
BEGIN
-- 分隔符参数为NULL时则使用"|"
SET @chvnSeparator = ISNULL(@chvnSeparator, N'|'); DECLARE @intPos AS INT = 0;
SET @intPos = CHARINDEX(@chvnSeparator, @chvnKeyWords); WHILE @intPos >= 1 /* @intPos > 0*/
BEGIN
IF @intPos >= 2 /*@intPos > 1*/
BEGIN
INSERT INTO @tblResult (Word)
VALUES (LEFT(@chvnKeyWords, @intPos - 1));
END -- 也可以使用SUBSTRING字符串函数
--SET @chvnKeyWords = SUBSTRING(@chvnKeyWords, @intPos + 1, LEN(@chvnKeyWords) - (@intPos + 1) + 1); SET @chvnKeyWords = STUFF(@chvnKeyWords, 1, @intPos, N'');
SET @intPos = CHARINDEX(@chvnSeparator, @chvnKeyWords);
END IF @chvnKeyWords > N''
BEGIN
INSERT INTO @tblResult (Word)
VALUES(@chvnKeyWords);
END RETURN;
END
GO
执行以上函数的T-SQL代码如下:
SELECT *
FROM dbo.ufn_SplitToTable(N'ab,bc,cc,bb,cd', N',');
GO
得到的查询结果如下:


SELECT *
FROM dbo.ufn_SplitToTable(N',,1,2,3,6,8,,9,', ',');
GO
执行后的查询结果为:


SQL Server 分隔字符串函数实现的更多相关文章
- SQL Server:字符串函数
以下所有例子均Studnet表为例: 1. len():计算字符串长度 len()用来计算字符串的长度,每个中文汉字或英文字母都为一个长度 select sname, len(sname) from ...
- sql server常用字符串函数
--返回字符表达式中最左侧字符的ASCII代码值 --将整数ASCII代码转换为字符 )--a )--A ')--A SELECT CHAR('A')--在将 varchar 值 'A' 转换成数据类 ...
- SQL Server之字符串函数
以下所有例子均Studnet表为例: 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...
- Sql Server分割字符串函数
-- Description: 分割字符串函数 -- SELECT * FROM dbo.Split('a,b,c,d,e,f,g',',') -- ========================= ...
- SQL Server中字符串函数LEN 和 DATALENGTH辨析
LEN:返回指定字符串表达式的字符(而不是字节)数,其中不包含尾随空格. DATALENGTH:返回用于表示任何表达式的字节数. 示例1:(相同,返回结果都为5): select LEN ('ssss ...
- sql server中常用方法函数
SQL SERVER常用函数 1.DATEADD在向指定日期加上一段时间的基础上,返回新的 datetime 值. (1)语法: DATEADD ( datepart , number, date ) ...
- SQL Server 内置函数、临时对象、流程控制
SQL Server 内置函数 日期时间函数 --返回当前系统日期时间 select getdate() as [datetime],sysdatetime() as [datetime2] getd ...
- 10、SQL Server 内置函数、临时对象、流程控制
SQL Server 内置函数 日期时间函数 --返回当前系统日期时间 select getdate() as [datetime],sysdatetime() as [datetime2] getd ...
- SQL Server 2005 MD5函数
原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的M ...
随机推荐
- web工程依赖的问题
http://blog.csdn.net/testcs_dn/article/details/43764497 做个记录
- MongoDB-query查询接口
在上一篇中简要使用了C# 对MongoDB进行数据操作,这里补充一些MongoDB query查询条件文档: Query.All("name", "a",&qu ...
- Python程序员的进化史
各种程序员所写的阶乘算法代码 # -*- coding: utf-8 -*- #新手程序员(递归) def factorial(x): if x == 0: return 1 else: return ...
- maven 检查依赖冲突和版本冲突
maven 检查依赖冲突和版本冲突 在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令: 1 2 3 mvn -U clean package - ...
- easyui datagrid toolbar 添加搜索框
最近用到了就研究了下,效果 把列名稍加转换放入menubtton,对于单项搜索来说还是非常方便的 var fields = $('#tt').datagrid('getColumnFields') ...
- Exchange 2013 、Lync 2013、SharePoint 2013 三
前两篇介绍的是关于Exchange 与 Lync 之间的配制关系,这一篇介绍关于Lync.Exchange 与 SharePoint 之间建立信任关系. 首先要创建基于SSL的SharePoint A ...
- emberjs学习一(环境和第一个例子)
code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } code, pre t ...
- [DeviceOne开发]-轮播图和多模板的简单示例
一.简介 这个例子是利用Slideview组件实现循环轮播的效果,同时这个slideview作为一个listview的最上面的一行数, 1. listview有2个模板,一个是以slideview为核 ...
- angular源码分析:angular源代码的获取与编译环境安装
一.安装git客户端 1.windows环境推荐使用TortoiseGit. 官网地址:http://tortoisegit.org 下载地址:http://tortoisegit.org/downl ...
- User Profile Service Application 配置同步连接时,报 MOSS MA not found
最近在试着配置"我的网站",不知什么原因在配置同步连接时报:MOSS MA not found 搜索发现,需要启动Forefront Identity Manager Servic ...