广告
返回顶部
首页 > 资讯 > 数据库 >几种分割字符串实现方法的比较
  • 947
分享到

几种分割字符串实现方法的比较

2024-04-02 19:04:59 947人浏览 独家记忆
摘要

在数据库开发中,有时会遇到把字符串,按一定规则进行分割,比如“a,b,c,1,2,3”这样的以逗号为分隔符的字符串,需要把分割出来,分割后单独变行一行记录。首先想到的是使用替换函数把分隔符去掉。于是有了:I

数据库开发中,有时会遇到把字符串,按一定规则进行分割,比如“a,b,c,1,2,3”这样的以逗号为分隔符的字符串,需要把分割出来,分割后单独变行一行记录。首先想到的是使用替换函数把分隔符去掉。于是有了:

IF (OBJECT_ID(N'Tempdb..##T1') IS NOT NULL)
BEGIN
    DROP TABLE ##T1;
END
Go
DECLARE @string NVARCHAR(MAX);
SET @string=N'123,abc,456,AAA,DDD';
SET @string=N'SELECT * INTO ##T1 FROM (SELECT ''' + 
            REPLACE(@string,',',''' AS result UNION ALL SELECT ''') + ''') a' ;
EXEC(@string);
SELECT * FROM ##T1;
GO

Code-1: 方法1


该方法拼接sql语句,简单巧妙,但有不足。(1)拼接的SQL不够直观,较难编写;(2)如果分隔符是半角的英文单引号的话,需要再作处理;(3)某些 情况下,如果字符串有中文等非英文字符,会显示乱码;(4)由于拼接的SQL,如果要分割的字符串很长很长,那么拼接的SQL可能会过长,而不能被执行。 所以这种方法只能作简单的替换或开拓思维之用。



方法2(推荐):

IF OBJECT_ID(N'fn_split_rowno') IS NOT NULL
BEGIN
    DROP FUNCTioN fn_split_rowno;
END
GO

CREATE FUNCTION fn_split_rowno
(
    @str       NVARCHAR(MAX)
   ,@split     NVARCHAR(20) = ','
)
RETURNS @t TABLE(row_no INT ,col NVARCHAR(500))
AS
BEGIN
    DECLARE @i INT
    SET @i = 0
    WHILE (CHARINDEX(@split ,@str) <> 0)
    BEGIN
        INSERT @t (row_no,col)
        VALUES(@i + 1,SUBSTRING(@str ,1 ,CHARINDEX(@split ,@str) -1))     
        SET @str = STUFF(@str ,1 ,CHARINDEX(@split ,@str) + LEN(@split) -1 ,'')
        SET @i = @i + 1 
    END  
    IF (@str <> '')
        INSERT @t (row_no,col)
        VALUES(@i + 1 ,@str)
    
    RETURN
END
GO

Code-2: 方法2(推荐)



封装成函数,方便调用,并且不会出现方法1中的问题。

SELECT * FROM fn_split_rowno(N'123,abc,456,AAA,DDD,51CTO',',')

Code-3: 调用函数



方法3(来自网络):

DECLARE @string NVARCHAR(MAX)
SET @string = N'123,abc,456,AAA,DDD,博客园'
SELECT REPLACE(REVERSE((LEFT(s ,CHARINDEX(',' ,s)))) ,',' ,'') AS result
FROM   (
           SELECT r,REVERSE(LEFT(@string ,r)) + ',' AS s
           FROM   (
                      SELECT (
                                 SELECT COUNT(*)
                                 FROM   sys.objects
                                 WHERE  NAME <= t.name
                             ) AS r
                      FROM   sys.objects AS t
                  ) a
           WHERE  r <= LEN(@string) AND LEFT(@string + ',' ,r + 1) LIKE '%,'
       ) t
ORDER BY r

Code-3: 方法3



方法4(来自网络):

DECLARE @string NVARCHAR(MAX) 
SET @string = N'123,abc,456,AAA,DDD'
DECLARE @idoc INT;  
DECLARE @doc XML;  
SET @doc = CAST('<Root><item><S>' + REPLACE(@string ,',' ,'</S></item><item><S>') 
            + '</S></item></Root>' AS XML)
EXEC sp_xml_preparedocument @Idoc OUTPUT,@doc
SELECT * FROM OPENXML(@Idoc ,'/Root/item' ,2) WITH ([S] VARCHAR(10)) 
GO

Code-4: 方法4


后面两种方法也是过于复杂,并且也有不足。




您可能感兴趣的文档:

--结束END--

本文标题: 几种分割字符串实现方法的比较

本文链接: https://www.lsjlt.com/news/39499.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 几种分割字符串实现方法的比较
    在数据库开发中,有时会遇到把字符串,按一定规则进行分割,比如“a,b,c,1,2,3”这样的以逗号为分隔符的字符串,需要把分割出来,分割后单独变行一行记录。首先想到的是使用替换函数把分隔符去掉。于是有了:I...
    99+
    2022-10-18
  • js字符串分割处理的几种方法(6种)
    目录1、slice(start, end)2、substr(start, length)3、substring(start, stop)4、split(separ...
    99+
    2022-11-13
  • java 分割字符串(多种方法)
    [toc] 1、String#split 可以根据给定的分隔符或正则表达式将一个字符串分割成多个部分 // 使用正则表达式 "(...
    99+
    2023-08-31
    java Powered by 金山文档
  • Java中实现String字符串分割的3种方法
    目录Java中实现String字符串分割的3种方法方法1:split(string) 方法方法2:substring方法方法3:StringTokenizer方法扩展:JAVA 截取...
    99+
    2023-05-20
    java string字符串分割 java 字符串分割
  • 浅谈Java字符串比较的三种方法
    目录java字符串如何进行比较?1.通过使用 equals() 方法2.通过使用 == 运算符3.通过使用 compareTo() 方法java字符串如何进行比较? 我们可以根据内容...
    99+
    2023-05-14
    Java字符串 Java字符串比较
  • String字符串分割的3种方法 Java
    方法1:split(string) 方法 使用了 split(string) 方法通过指定分隔符将字符串分割为数组 public class Test { public static void ...
    99+
    2023-09-08
    java jvm 开发语言
  • C++实现字符串切割的两种方法
    目录字符串切割的两种方法1、通过stl实现2、通过使用strtok()函数实现字符串分割&类型转换(string->double)字符串切割的两种方法 字符串切割的使用...
    99+
    2022-11-13
  • Java 切割字符串的几种方式集合
    目录Java 切割字符串的几种方式1、StringTokenizer切割2、..split("*")分割3、调用String自己的api subString()java优雅...
    99+
    2022-11-12
  • javascript分割字符串的方法
    这篇文章给大家分享的是有关javascript分割字符串的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。分割方法:1、用“string.split(分割符)”;2、用“String.substring...
    99+
    2023-06-14
  • Pythonre.split方法分割字符串的实现示例
    目录re.split方法问题解决方案讨论re.split方法 注:使用前需要引入包(import re) 功能:split能够按照所能匹配的字串将字符串进行切分,返回切分后的字符串列...
    99+
    2022-11-11
  • 字符串分割并存入List的四种方法
    使用stream转换String集合 List strList2 = Arrays.stream(str.split(“,”)).collect(Collectors.toList()); 2.先用split将字符串按逗号分割为数组,再用A...
    99+
    2023-08-17
    list java 数据结构
  • C++中string字符串分割函数split()的4种实现方法
    目录一、使用stringstream流二、使用string类提供的find方法与substr方法三、使用C库函数strtok四、使用regex_token_iterator(正则表达...
    99+
    2022-11-13
  • PHP比较两个字符串的方法
    这篇文章主要讲解了“PHP比较两个字符串的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP比较两个字符串的方法”吧!字符串比较是字符串处理中常见的一种操作,PHP中比较两个字符串有很...
    99+
    2023-06-20
  • Java实现字符串的分割(基于String.split()方法)
    目录前言一、JDK-1.8-API文档说明(推荐阅读)二、简单的使用1、单个字符分隔2、正则表达式三、Java源码分析1、源代码的测试代码2、源代码运行原理图示3、解读完代码后的总结...
    99+
    2022-11-13
  • 使用Python去除字符串中某个字符的多种实现方式比较
    目录1、如何去掉字符串中不需要的字符?2、代码演示总结1、如何去掉字符串中不需要的字符? 实际案例: (1)过滤掉用户输入前后多余的空白字符:' nick2008@gmail...
    99+
    2022-11-11
  • js中常见切割截取字符串的几种方法小结
    目录1、 split() 方法用于把一个 字符串 分割成 字符串数组 ;2、 slice() 可提取字符串的某个部分,并以新的字符串返回被提取的部分;3、substring...
    99+
    2022-11-13
  • JavaScript字符串比较的方法有什么
    本篇内容主要讲解“JavaScript字符串比较的方法有什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript字符串比较的方法有什么”吧!Jav...
    99+
    2022-10-19
  • Java字符串比较的方法有哪些
    本篇内容主要讲解“Java字符串比较的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java字符串比较的方法有哪些”吧!java字符串如何进行比较我们可以根据内容和引用来比较Java中...
    99+
    2023-07-05
  • python用split多字符分割字符串的方法
    python 有内置函数split()分隔字符串,但这个内置函数只能识别单个分隔符。 调用方法如下:  str.split(str="", num=string.count(str)). 其中:  str -- 分隔符,默认为所有的空字符,...
    99+
    2023-09-25
    python 开发语言
  • Go字符串比较的实现示例
    目录Compare 和 EqualFold 区别忽略大小写比较字符串比较, 可以直接使用 == 进行比较, 也可用用 strings.Compare 比较 go 中字符串比较有三种方...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作