`

字符串处理--字符串拆分

阅读更多

--各种字符串分函数

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

 

 

 

/*==============================================*/
--3.2.4分拆数据到列
declare @t table(col varchar(50))
insert into @t select 'aa,ab,ac'
insert into @t select '1,2,3'

declare @i int,@s varchar(1000)
set @i=0
select col into #t from @t
while @@rowcount>0   --开始循环
 begin
  select @i=@i+1, @s='alter table #t add col' + cast(@i as varchar) +' varchar(10)'  --修改表结构,添加一列
 exec(@s)
 set @s=' update #t set col'+cast(@i as varchar)
  +'=left(col,charindex('','',col+'','')-1),
   col=stuff(col,1,charindex('','',col+'',''),'''')
  where col>'''''   --修改刚添加的那一列值,然后截断col列
 exec(@s)
end   --结束循环
--删除col列和最后一列
set @s='alter table #t drop column col,col'+cast(@i as varchar)

exec(@s)
select * from #t
drop table #t

 

 

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

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
 SELECT No=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

 

分享到:
评论

相关推荐

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

    在VB(Visual Basic)编程中,处理字符串是常见的任务之一,其中包括将一个长字符串拆分成多个子字符串。这个过程通常称为“字符串拆分”或“分隔字符串”。在这个主题中,我们将深入探讨VB中如何实现这一操作,以及...

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

    在LabVIEW中处理字符串是一项常见的任务,尤其是将一个字符串拆分成多个子字符串,这通常涉及到字符串的分割操作。本篇将详细介绍如何在LabVIEW中实现“字符串拆分到数组”并支持中文字符。 一、字符串拆分的基本...

    使用正则表达式拆分字符串

    - **分隔符**:在大多数编程语言中,字符串拆分操作通常需要一个分隔符,正则表达式提供了一个灵活的分隔符,可以是任意复杂的模式,而不仅仅是单个字符。 - **全局匹配**:为了拆分整个字符串,我们需要启用全局...

    LabVIEW拆分中文字符串.rar

    在LabVIEW中处理字符串,尤其是中文字符串,有时会涉及到特殊的技巧和注意事项,因为中文字符是多字节的,与英文等单字节字符处理方式有所不同。这个"LabVIEW拆分中文字符串.rar"文件很可能是提供了一个解决此类问题...

    C语言字符串拆分成字符串数组.c

    纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。

    python拆分中英文混合字符串 - 按中文拆分

    python拆分中英文混合字符串 - 按中文拆分

    matlab开发-拆分分隔符分隔字符串到矩阵

    `strsplit`函数是MATLAB用于字符串拆分的主要函数,它允许用户根据指定的分隔符将字符串分解成单独的元素。例如,在标题中提到的"matlab开发-拆分分隔符分隔字符串到矩阵",就是利用`strsplit`函数来实现的。这个...

    Labview 搜索拆分字符串

    Labview编写的代码, 搜索拆分字符串

    常用字符串处理函数-求子字符串,字符串分割,编码转换.

    ### 常用字符串处理函数:求子字符串、字符串分割与编码转换 在现代编程语言如JavaScript中,字符串处理是日常开发中极为常见的任务之一。本文将深入探讨几个常用的字符串处理函数,包括如何求取子字符串、进行字符...

    C++ 根据表示符号拆分字符串

    当我们需要根据特定的分隔符或标识符将一个长字符串拆分成多个子串时,可以使用不同的方法。标题“C++ 根据表示符号拆分字符串”所指的就是这个过程。在描述中提到,“根据特定的标识符拆分现有的字符串”,这通常...

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

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

    可读的 Fortran 字符串处理模块

    字符串连接和拆分:提供了函数用于将多个字符串连接成一个字符串,或将一个字符串拆分成多个子字符串。2. 字符串查找和替换:包含了用于在字符串中查找特定子串或字符的函数,以及用于替换字符串中特定子串或字符的...

    类型转换与字符串拆分

    理解并灵活运用类型转换和字符串拆分,可以帮助我们更好地处理和解析各种复杂的数据。在编写代码时,应根据具体需求选择合适的方法,同时注意边界条件和异常处理,确保程序的健壮性。在团队合作中,清晰、规范的类型...

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

    在LabVIEW中,处理字符串是一项常见的任务,尤其是当你需要将一个长字符串拆分成多个子字符串时。本教程将详细介绍如何在LabVIEW中实现“字符串拆分到数组”并支持中文字符。 首先,理解基本概念: 1. **字符串**: ...

    Pb字符串中的中文和英文(含符号)拆分

    这个函数能够有效地处理中文和英文混合的字符串,将其拆分为单独的中文部分和英文部分。通过调用 `uf_split_str_enorcn('中字A文C')`,我们将得到 `'中字文'` 和 `'AC'` 作为结果。 在实际应用中,这个函数可以扩展...

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

    - **处理边界情况**:如果找不到更多的分隔符,则默认将`@location`设置为字符串的长度加1,以便正确截取出最后一个子字符串。 - **返回子字符串**:利用`SUBSTRING`函数根据`@start`和`@location`的值截取第n个子...

    Java高级程序设计:第6章-字符串和包装类.pptx

    字符串拆分;字符串比较;字符串转换;length() and ca;StringBuffer Co;Appending New C;insert New Cont;delete Contents;Modify String B;练习;包装类(Wrapper Cla;Wrapper Classes;数字包装类的构造方法;从数字对象...

    ACM-字符串处理专练

    10. **字符串分解**:如找到字符串的所有子串、所有子序列,或者按特定规则分割字符串,如通过分隔符进行拆分。 在ACM竞赛中,字符串处理的题目往往需要结合其他数据结构和算法,如栈、队列、图、树、动态规划等,...

    字符串分隔

    输入:首先输入数字n,表示要...输出:按长度为8拆分每个字符串后输出到新的字符串数组,长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 样例输入: 2 abc 123456789 样例输出: abc00000 12345678 90000000

    用string拆分字符串

    无论是在哪种语言中,理解并熟练运用字符串拆分技巧对于处理文本数据至关重要,尤其是在数据分析、日志解析和文件处理等场景中。通过学习这些方法,我们可以更有效地从字符串中提取信息,为后续的编程任务提供便利。

Global site tag (gtag.js) - Google Analytics