SQL 特定字符串分割

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 特定字符串分割相关的知识,希望对你有一定的参考价值。

从后台传递参数,格式是111111,222222,123123,2342343,

循环取出‘,’间的值

第一次取出111111
第二次取出222222
第三次取出123123

逗号间数值的长度是不确定的

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE function [dbo].[SplitString]
(
    @Input nvarchar(max),
    @Separator nvarchar(max)=',', 
    @RemoveEmptyEntries bit=1 
)
returns @TABLE table 
(
    [Id] int identity(1,1),
    [Value] nvarchar(max)

as
begin 
    declare @Index int, @Entry nvarchar(max)
    set @Index = charindex(@Separator,@Input)

    while (@Index>0)
    begin
        set @Entry=ltrim(rtrim(substring(@Input, 1, @Index-1)))
        
        if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
            begin
                insert into @TABLE([Value]) Values(@Entry)
            end

        set @Input = substring(@Input, @Index+datalength(@Separator)/2, len(@Input))
        set @Index = charindex(@Separator, @Input)
    end
    
    set @Entry=ltrim(rtrim(@Input))
    if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
        begin
            insert into @TABLE([Value]) Values(@Entry)
        end

    return
end

方法是其他地方找的

set @str1 = '1,2,3'
select [Value] from [dbo].[SplitString](@str1, ',', 1)

追问

其实,我有个方法,因为效率不太高,所以,想换一种,你这种效率更低一些。。。

参考技术A 假如你的是sql server,去百度一下:SQL实现split功能的函数 参考技术B string paramer="111111,222222,123123,2342343";
string[] a = paramer.Split(',');
Console.Write(a[0]+"\r\n"+a[1]+"\r\n"+a[2]);追问

亲,看清题目,是SQL server

参考技术C split(", ");

以上是关于SQL 特定字符串分割的主要内容,如果未能解决你的问题,请参考以下文章

sql如何根据隔符分割字符串?

oracle sql 实现查询时把一字符串按逗号分割,返回分割后的份数?

SQL一字段内的字符串按照特定字符串转化为多行显示

C语言自定义函数实现以特定字符分割字符串

PHP截取指定#分割字符后面的数据

mysql 字符串分割 和 动态执行拼接sql