`

转:SQL Server字符串拆分(split)

阅读更多

转载链接找不到了,有知道的麻烦告知。

以下是转载内容:

--支持分割符多字节

--使用方法 --select * from dbo.split('abc-def-ghi-jkl','-')

--select * from dbo.split('abc----def----ghi----jkl','----')


CREATE FUNCTION [dbo].[split](@Long_str varchar(max),@split_str varchar(100))
RETURNS @tmp TABLE(
ID int IDENTITY PRIMARY KEY,
short_str varchar(max)
)
AS
BEGIN
DECLARE @long_str_Tmp varchar(max),
@short_str varchar(max),
@split_str_length int

SET @split_str_length = LEN(@split_str)

IF CHARINDEX(@split_str,@Long_str)=1
     SET @long_str_Tmp=SUBSTRING(@Long_str,
 @split_str_length+1,
 LEN(@Long_str)-@split_str_length)

ELSE
     SET @long_str_Tmp=@Long_str

IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1
    SET @long_str_Tmp=@long_str_Tmp+@split_str
ELSE
    SET @long_str_Tmp=@long_str_Tmp

WHILE CHARINDEX(@split_str,@long_str_Tmp)>0
    BEGIN
	SET @short_str=SUBSTRING(@long_str_Tmp,1,
 CHARINDEX(@split_str,@long_str_Tmp)-1)
	DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int
	SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)
	SET @split_str_Position_END = LEN(@short_str)+@split_str_length
	SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,
 @long_str_Tmp_LEN-@split_str_Position_END))
	IF @short_str<>'' INSERT INTO @tmp SELECT @short_str
    END
RETURN
END

以上为第一种拆分方法。

 

再转载一个类似的拆分方法:

原文转载自:http://www.cnblogs.com/zc_0101/archive/2009/06/30/1513776.html

转载内容如下:

--SQL Server Split函数
--Author:zc_0101 
--说明:
--支持分割符多字节
--使用方法 
--Select * FROM DBO.F_SQLSERVER_SPLIT('1203401230105045','0')    
--select * from DBO.F_SQLSERVER_SPLIT('abc1234a12348991234','1234') 
--Select * from DBO.F_SQLSERVER_SPLIT('ABC',',')   
CREATE FUNCTION F_SQLSERVER_SPLIT(@Long_str NVARCHAR(MAX),@split_str NVARCHAR(100))    
RETURNS  @tmp TABLE(        
    ID          inT     IDENTITY PRIMARY KEY,      
    short_str   NVARCHAR(MAX)    
)    
AS   
BEGIN   
    DECLARE @short_str NVARCHAR(MAX),@split_str_length int,@split_str_Position_Begin int
    SET @split_str_length = LEN(@split_str) 
    SET @Long_str=REPLACE(REPLACE(@Long_str,CHAR(10),''),CHAR(13),'')
    IF CHARINDEX(@split_str,@Long_str)=1 
         SET @Long_str=STUFF(@Long_str,1,@split_str_length,'')
    IF CHARINDEX(@split_str,@Long_str)=0
        INSERT INTO @tmp SELECT @Long_str 
    ELSE
        BEGIN
            WHILE 1>0    
                BEGIN   
                    SET @split_str_Position_Begin = CHARINDEX(@split_str,@Long_str)
                    SET @short_str=LEFT(@Long_str,@split_str_Position_Begin-1) 
                    IF @short_str<>'' INSERT INTO @tmp SELECT @short_str  
                    SET @Long_str=STUFF(@Long_str,1,@split_str_Position_Begin+@split_str_length-1,'')
                    SET @split_str_Position_Begin = CHARINDEX(@split_str,@Long_str)
                    IF @split_str_Position_Begin=0 
                    BEGIN
                        IF LTRIM(@Long_str)<>''
                            INSERT INTO @tmp SELECT @Long_str 
                        BREAK
                    END
                END           
        END
    RETURN     
END

以上为第二种拆分方法。

 

最后再转载一个汇总的:

原文转载自:http://www.cnblogs.com/aierong/archive/2008/11/19/sqlserver_split.html

以下为转载内容:

--方法0:动态SQL法
declare @s varchar(100),@sql varchar(1000)
set @s='1,2,3,4,5,6,7,8,9,10'
set @sql='select col='''+ replace(@s,',',''' union all select ''')+''''
PRINT @sql
exec (@sql) 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO
--方法1:循环截取法
CREATE FUNCTION f_splitSTR(
@s   varchar(8000),   --待分拆的字符串
@split varchar(10)     --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
 DECLARE @splitlen int
 SET @splitlen=LEN(@split+'a')-2
 WHILE CHARINDEX(@split,@s)>0
 BEGIN
  INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
  SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
 END
 INSERT @re VALUES(@s)
 RETURN
END
GO 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO
--方法2:使用临时性分拆辅助表法
CREATE FUNCTION f_splitSTR(
@s   varchar(8000),  --待分拆的字符串
@split varchar(10)     --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
 --创建分拆处理的辅助表(用户定义函数中只能操作表变量)
 DECLARE @t TABLE(ID int IDENTITY,b bit)
 INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b

 INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
 FROM @t
 WHERE ID<=LEN(@s+'a')
  AND CHARINDEX(@split,@split+@s,ID)=ID
 RETURN
END
GO 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1)
drop table [dbo].[tb_splitSTR]
GO
--方法3:使用永久性分拆辅助表法
--字符串分拆辅助表
SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
FROM syscolumns a,syscolumns b
GO
--字符串分拆处理函数
CREATE FUNCTION f_splitSTR(
@s     varchar(8000),  --待分拆的字符串
@split  varchar(10)     --数据分隔符
)RETURNS TABLE
AS
RETURN(
 SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
 FROM tb_splitSTR
 WHERE ID<=LEN(@s+'a')
  AND CHARINDEX(@split,@split+@s,ID)=ID)
GO 

--方法4:利用sql server2005的OUTER APPLY
--备注说明:必须在sql server2005下才可以运行
CREATE FUNCTION [dbo].[ufn_SplitStringToTable]
(
  @str VARCHAR(MAX) ,
  @split VARCHAR(10)
)
RETURNS TABLE
    AS
RETURN
    ( SELECT    B.id
      FROM      ( SELECT    [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>')
                            + '</v>')
                ) A
      OUTER APPLY ( SELECT  id = N.v.value('.' , 'varchar(100)')
                    FROM    A.[value].nodes('/v') N ( v )
                  ) B
    )

 

分享到:
评论

相关推荐

    SQLServer逗号分隔的字符串转换成表

    2. 利用 SQL Server 函数进行字符串拆分:可以使用 SQL Server 的字符串函数,例如 CHARINDEX、LEFT、RIGHT、LEN 等函数对字符串进行拆分。 3. 将拆分后的数据写入到临时表中:将拆分后的数据写入到第 1 步中创建的...

    Sql Server数据库中自定义拆分字符串函数Split()

    Sql Server数据库中自定义拆分字符串函数Split()

    sql2000字符串分割,字符串拆分

    #### 标题解读:“sql2000字符串分割,字符串拆分” 此标题指明了文章的主要内容是关于如何在SQL Server 2000环境中实现字符串的拆分操作。字符串拆分通常是指将一个较长的字符串按照某种规则(如特定字符)分割成...

    SQL字符串按殊字符串拆分.zip

    "SQL字符串按殊字符串拆分.zip"这个压缩包文件显然提供了一个解决方案,它帮助用户更快速、便捷地拆分包含特殊字符的字符串。这个工具或者教程可能是通过一系列步骤或存储过程来实现的,使得用户可以自定义拆分规则...

    sqlserver中根据某个字符切割字符串函数

    sqlserver中根据某个字符切割字符串函数,比如根据逗号切割字符串,结果返回的是一个表值函数,这个函数返回结果字段包含Id和Value,Id为序号,Value为切割后的值

    sqlserver2008 拆分字符串

    在SQL Server 2016及更高版本中,引入了`STRING_SPLIT`函数,这使得字符串拆分变得更加简单和高效。 总结起来,SQL Server 2008中拆分字符串通常需要自定义解决方案,如上述的交叉连接方法。虽然这个方法可以工作,...

    SQL server中实现类似split功能的函数

    在SQL Server中,"split功能"通常指的是将一个字符串拆分成多个部分,这在处理以特定分隔符分隔的数据时非常有用。SQL Server并没有内置的`SPLIT`函数,但可以通过其他方式来实现这个功能。下面我们将详细介绍如何在...

    SQL SERVER 根据关键字符,将一列分成多行

    可根据关键字符将一列分成多行显示,例如 A B 1 1.1.2 拆分成 1 1 1 1 1 2 进行相关的显示

    sqlserver实现字符拆解成表格的形式

    在SQL Server中,经常需要处理字符串操作,例如将一个包含多个值的字符串拆分成多个行。这种需求常见于数据导入、数据清洗等场景。本篇文章将详细介绍如何利用SQL Server自定义函数实现字符串拆分并转化为表格形式的...

    SQL Server字符串切割函数

    除了自定义函数,SQL Server还内置了一些内置的字符串切割函数,如`STRING_SPLIT()`(SQL Server 2016及以上版本)、`PARSENAME()`、`LEFT()`、`RIGHT()`、`SUBSTRING()`等。`STRING_SPLIT()`可以将字符串按指定分隔...

    截取用,分割的字符串中的第n个字符串 SQL

    根据给定的信息,本文将详细解释如何在SQL中实现截取用特定字符分割的字符串中的第n个子字符串。此需求通常应用于数据处理与分析场景中,尤其在处理半结构化或非结构化的文本数据时非常有用。 ### 核心知识点解析 ...

    解析SQL Server连接字符串信息 编程小实例,C++.net源代码编写

    `Split`方法可以基于分号将字符串拆分为子字符串数组,然后对每个子字符串进行进一步处理,使用正则表达式匹配属性名和值。 以下是一个简单的C#.NET示例,演示如何解析连接字符串: ```csharp using System; using...

    db2字符串分隔,函数,过程的使用

    在处理字符串时,DB2提供了多种函数和过程,使得对字符串的分隔、提取和操作变得方便高效。以下将详细介绍DB2中用于字符串分隔、函数及过程的使用。 1. 字符串分隔函数: 在DB2中,最常用的字符串分隔函数是`STRIP...

    sqlserver 字符串分拆 语句

    在SQL Server中,有时我们需要将一个字符串按照特定的分隔符进行拆分,以便处理或分析其中的数据。这种操作在数据库处理中非常常见,尤其是在处理CSV格式的数据时。标题和描述提到的“sqlserver 字符串分拆 语句”是...

    SQL Server实现split函数分割字符串功能及用法示例

    本文将详细介绍如何在SQL Server中实现`split`函数来分割字符串,并提供相关的使用示例。 首先,让我们了解这个自定义的`split`函数——`[dbo].[f_SplitToNvarchar]`。这个函数接受两个参数: 1. `@SourceSql`:这...

    plsql分割字符串

    通过对`FUNCTION_SF_SPLIT_STRING`的详细分析,我们可以看到,在PL/SQL中实现字符串分割不仅需要理解基本的字符串操作函数,还需要具备良好的逻辑思维和控制结构设计能力。掌握这种方法不仅可以提高数据库应用程序的...

    SQL实现字符串拆分2函数:splitstr,GetCharItem

    --用法 select * from dbo.splitstr('a,b,c,d,e') --返回表格 a b c d e --用处 select * from tbtable where ZID in (select ZValue from dbo.splitstr('a,b,c,d,e')) ...select dbo.GetCharItem('A,B,C,DE,F,GH',',',...

    Split-由任意个全角或半角空格分隔开的任意长度的字符串

    在Java中,可以使用`split()`方法,而在SQL中,可以使用`STRING_SPLIT()`函数(在某些版本的SQL Server中)。 2. **分隔符的处理**:如果分隔符是多种类型的空格,可能需要预处理字符串,将全角空格转换为半角空格...

Global site tag (gtag.js) - Google Analytics