澳门新葡亰娱乐网站-www.142net-欢迎您

澳门新葡亰娱乐网站是因为你还没有找到一条正确的致富之路,www.142net是将所有的游戏都汇集在一起的官方平台,因为澳门新葡亰娱乐网站这个网站当中有着大量的游戏攻略,托IP定位技术,传达终端直接到达的精准传播方式。

SQL分隔字符串,分隔字符串函数实现

来源:http://www.bhtsgq.com 作者:计算机知识 人气:162 发布时间:2019-05-24
摘要:SQL分隔字符串,分隔字符串函数实现。始建函数: SQL分隔字符串,sql分隔 创制函数: CREATE FUNCTION[dbo].[split](@str NVARCHAR(max),@spliter NVARCHAR(10))--@str:目标字符串--@spliter:分隔符RETURNS @tb TA

SQL分隔字符串,分隔字符串函数实现。始建函数:

SQL分隔字符串,sql分隔

创制函数:

CREATE FUNCTION[dbo].[split](@str NVARCHAR(max),@spliter NVARCHAR(10))
--@str:目标字符串
--@spliter:分隔符
RETURNS @tb TABLE(ch NVARCHAR(max))
AS
BEGIN
DECLARE @Num INT,@Pos INT, @NextPos INT
SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@str))
BEGIN
SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@str)   1
INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos))))
SELECT @Pos = @NextPos 1
END
RETURN
END
GO

行使方法:

SELECT * FROM dbo.split('1,2,3,4',',') --注:多行单列的数据表

测试语句:

IF object_id(N'[dbo].[split]') IS NOT NULL --检查函数【[dbo].[split]】是否存在
BEGIN
    DROP FUNCTION [dbo].[split] --删除函数
END
GO


CREATE FUNCTION[dbo].[split](@str NVARCHAR(max),@spliter NVARCHAR(10))
--@str:目标字符串
--@spliter:分隔符
RETURNS @tb TABLE(ch NVARCHAR(max))
AS
BEGIN
DECLARE @Num INT,@Pos INT, @NextPos INT
SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@str))
BEGIN
SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@str)   1
INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos))))
SELECT @Pos = @NextPos 1
END
RETURN
END
GO

SELECT * FROM dbo.split('1,2,3,4',',')

DROP FUNCTION [dbo].[split]
GO

说明:

  1、仅帮衬文本字符串分隔!!!

 

成立函数: CREATE FUNCTION [ dbo ] . [ split ] ( @str NVA帕杰罗CHA君越 ( max ), @spliter NVACR-VCHASportage ( 十)) -- @str:指标字符串 -- @spliter:分隔符...

在SQL Server中有的时候候也会遇上字符串实行分隔的供给。日常干活中平时遭受这样的供给,比如:职员数据表和人口爱好数据表,一条职员记录能够多两个人手爱好记录,而频仍人士和人口爱幸好分界面显得层要一并提交入库的,至于达成该须求自个儿基本上使用三种艺术:1种格局是代码先达成一条职员记录的拉长或涂改时,在数码访问层针对职员幸好记录的循环增添或修改;还会有一种通过存款和储蓄封装,代码将入选的人口爱好记录标志键以分隔符连接起来作为字符串集,在存款和储蓄进程中在分割字符串集,完毕批量布署(注意:所比方表明有希望不完全妥帖,如若博友提议不妥、错误以及提出,非常多谢)。

CREATE FUNCTION[dbo].[split](@str NVARCHAR(max),@spliter NVARCHAR(10))
--@str:目标字符串
--@spliter:分隔符
RETURNS @tb TABLE(ch NVARCHAR(max))
AS
BEGIN
DECLARE @Num INT,@Pos INT, @NextPos INT
SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@str))
BEGIN
SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@str)   1
INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos))))
SELECT @Pos = @NextPos 1
END
RETURN
END
GO

 

运用方法:

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

SELECT * FROM dbo.split('1,2,3,4',',') --注:多行单列的数据表
 1 IF OBJECT_ID(N'[dbo].[ufn_SplitToTable]', N'TF') IS NOT NULL
 2 BEGIN
 3     DROP FUNCTION [dbo].[ufn_SplitToTable];
 4 END
 5 GO
 6  
 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代码如下:

IF object_id(N'[dbo].[split]') IS NOT NULL --检查函数【[dbo].[split]】是否存在
BEGIN
    DROP FUNCTION [dbo].[split] --删除函数
END
GO


CREATE FUNCTION[dbo].[split](@str NVARCHAR(max),@spliter NVARCHAR(10))
--@str:目标字符串
--@spliter:分隔符
RETURNS @tb TABLE(ch NVARCHAR(max))
AS
BEGIN
DECLARE @Num INT,@Pos INT, @NextPos INT
SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@str))
BEGIN
SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@str)   1
INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos))))
SELECT @Pos = @NextPos 1
END
RETURN
END
GO

SELECT * FROM dbo.split('1,2,3,4',',')

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

本文由澳门新葡亰发布于计算机知识,转载请注明出处:SQL分隔字符串,分隔字符串函数实现

关键词: MSSQL 分隔字符串

上一篇:没有了

下一篇:没有了

最火资讯