`
xiaoer_1982
  • 浏览: 1888922 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

各种字符串拆分函数

阅读更多

--邹建

--各种字符串分函数

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

--3.2.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

--3.2.3.1 使用临时性分拆辅助表法
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.2.3.2 使用永久性分拆辅助表法
--字符串分拆辅助表
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


/*==============================================*/

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

--3.2.5 将数据项按数字与非数字再次拆份
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(No varchar(100),Value varchar(20))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b

INSERT @re
SELECTNo=REVERSE(STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,'')),
Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
FROM(
SELECT col=REVERSE(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID))
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)a
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

--3.2.6 分拆短信数据
CREATE FUNCTION f_splitSTR(@s varchar(8000))
RETURNS @re TABLE(split varchar(10),value varchar(100))
AS
BEGIN
DECLARE @splits TABLE(split varchar(10),splitlen as LEN(split))
INSERT @splits(split)
SELECT 'AC' UNION ALL
SELECT 'BC' UNION ALL
SELECT 'CC' UNION ALL
SELECT 'DC'
DECLARE @pos1 int,@pos2 int,@split varchar(10),@splitlen int
SELECT TOP 1
@pos1=1,@split=split,@splitlen=splitlen
FROM @splits
WHERE @s LIKE split+'%'
WHILE @pos1>0
BEGIN
SELECT TOP 1
@pos2=CHARINDEX(split,@s,@splitlen+1)
FROM @splits
WHERE CHARINDEX(split,@s,@splitlen+1)>0
ORDER BY CHARINDEX(split,@s,@splitlen+1)
IF @@ROWCOUNT=0
BEGIN
INSERT @re VALUES(@split,STUFF(@s,1,@splitlen,''))
RETURN
END
ELSE
BEGIN
INSERT @re VALUES(@split,SUBSTRING(@s,@splitlen+1,@pos2-@splitlen-1))
SELECT TOP 1
@pos1=1,@split=split,@splitlen=splitlen,@s=STUFF(@s,1,@pos2-1,'')
FROM @splits
WHERE STUFF(@s,1,@pos2-1,'') LIKE split+'%'
END
END
RETURN
END
GO

分享到:
评论

相关推荐

    Oracle拆分字符串,字符串分割的函数

    通过这些函数和技巧,我们可以高效地处理各种字符串拆分任务,无论是在简单的数据处理还是在复杂的业务逻辑中。对于更多复杂的需求,建议参考Oracle的官方文档和相关的技术博客,以获取最新的功能和最佳实践。

    pb split() 字符串分割函数

    在这个场景中,我们关注的是一个名为"pb split()"的自定义字符串分割函数。在Python或者其他语言中,内置的`split()`函数可能不能满足所有需求,因此开发者有时会自定义类似功能的函数来适应特定项目或优化性能。 `...

    纯C++ 字符串处理函数大全源码

    总的来说,这个"纯C++ 字符串处理函数大全源码"为C++开发者提供了一套实用的字符串操作工具,涵盖了字符串的分割、修剪、替换、合并等多种常见操作。通过引入这个库,开发者可以在自己的项目中快速高效地处理字符串...

    oracle-字符串去重函数

    传入一个字符串和该字符串的分割字符,返回去重后的字符串,可以直接在plsql中运行,简单的函数运用,能处理oracle中。资源仅供参考

    labview字符串拆分到数组 支持中文1

    总结,LabVIEW中的“字符串拆分到数组”功能是通过“字符串到数组”函数实现的,它支持包括中文在内的各种字符。理解这个函数的工作原理和使用方法,将有助于在LabVIEW编程中更加高效地处理字符串数据。

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

    在实际工作中,这些函数和过程可以结合使用,解决各种字符串处理需求。例如,如果你有一个字段存储了逗号分隔的值(如ID列表),你可以先使用`TOKENIZE()`分隔字符串,然后通过循环处理每个ID,这在处理批量数据时...

    C++字符串分割函数+VC助手

    C++字符串分割源码,破解版VC助手,兼容多个windows版本

    Oracle_Sql_中常用字符串处理函数

    Oracle Sql 中提供了多种字符串处理函数,用于对字符串进行各种操作,如大小写转换、截取、连接、查找、替换等。下面是 Oracle Sql 中常用的字符串处理函数: 1. 大小写转换函数 Oracle Sql 提供了两个大小写转换...

    C#中字符串操作函数

    字符串拆分函数 `Split` `Split`函数用于根据指定的分隔符将字符串分割成多个部分。在C#中,可以使用`Split()`方法来实现: ```csharp string str = "one,two,three"; string[] parts = str.Split(','); // parts...

    字符串分割成数组函数(plsql function)

    将字符串分割成数组: 例如将字符串“7369,7499,7521,7844"分割成 7369 7499 7521 7844 用法:可以将分割结果做为一个数组或者数据库表列来使用 select * from scott.emp where empno in (select column_value from...

    VB字符串处理函数_字符串处理函数_VB_

    12. **Split()** 函数:根据指定的分隔符将字符串分割成数组。例如,`Split("One;Two;Three", ";")` 返回一个数组,包含 "One"、"Two" 和 "Three"。 13. **Join()** 函数:将数组元素合并成一个字符串,中间用指定...

    分割字符串函数 分割字符串函数

    这里,我们将深入探讨字符串分割函数的相关知识,包括其工作原理、常见用法以及在不同编程语言中的实现。 首先,让我们理解什么是分隔符。分隔符通常是一个字符或者一组字符,用来标识字符串中的边界。例如,在英语...

    分割字符串函数

    根据给定的信息,我们可以深入探讨一下“分割字符串函数”这一主题。在计算机编程中,处理字符串是一项非常常见的任务。无论是从用户输入中提取有用信息、解析配置文件还是处理文本数据,字符串操作都扮演着至关重要...

    php字符串分割函数用法实例

    本文实例讲述了php字符串分割函数用法。分享给大家供大家参考。具体分析如下: php中explode 和 split 函数用来分割字符串。 explode函数语法如下 explode(substring, string) explode函数通过子字符串进行分割,...

    VB拆分字符串,分隔字符串

    `Split`函数是最常用的字符串拆分方法。它接受一个字符串作为输入,并根据指定的分隔符返回一个字符串数组。基本语法如下: ```vb Dim result() As String result = Split(inputString, delimiter) ``` 在这里,`...

    SQL字符串拆分函数

    SQL字符串拆分函数,可拆分任何格式的字符串,只需传入待拆分字符串及拆分参数即可

    纯C 的字符串按指定分隔符 分割函数

    用c语言写的按照指定分隔符进行字符串分割的函数。针对char*可以获得完美的结果。使用方便。

    字符串处理函数列表,字符串处理函数列表

    32. strtok:分割字符串,每次调用处理一个分隔符并返回一个子字符串,直到所有分隔符都被处理完。 这些函数涵盖了从基本的字符串比较、复制到复杂的查找、连接以及字符串操作等多个方面,是处理文本数据的基础。...

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

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

    Delphi字符串快速替换函数,速度超快 秒杀自带的StringReplace函数

    3. **多线程处理**:对于非常大的字符串,可以将字符串分割成多个部分并使用多线程进行并行替换,从而利用多核处理器的优势。 4. **避免不必要的复制**:在替换过程中,只复制必要的字符,而不是整个字符串。 `Q_...

Global site tag (gtag.js) - Google Analytics