sunxi

方案一:使用内置的函数

SUBSTRINGCHARINDEXLEN三个内置函数

理论:

SUBSTRING语法
 
SUBSTRING ( value_expression , start_expression , length_expression )
参数
value_expression:数据库字段
start_expression:指定返回字符的起始位置
length_expression:要截取的长度
返回类型

如果 expression 是其中一个受支持的字符数据类型,则返回字符数据。

CHARINDEX语法
 
CHARINDEX ( expression1 ,expression2 [ , start_location ] ) 
参数
expression1:包含要查找的序列的字符表达式。expression1 最大长度限制为 8000 个字符。
expression2:要搜索的字符表达式。
start_location:表示搜索起始位置的整数或 bigint 表达式。如果未指定 start_location,或者 start_location 为负数或 0,则将从 expression2 的开头开始搜索。
返回类型

如果 expression2 的数据类型为 varchar(max)nvarchar(max)varbinary(max),则为 bigint,否则为 int

LEN语法
 
LEN ( string_expression )
参数
string_expression:要求值的字符串表达式。string_expression 可以是常量、变量,也可以是字符列或二进制数据列。
返回类型

如果 expression 的数据类型为 varchar(max)nvarchar(max)varbinary(max),则为 bigint;否则为 int

实例:

SELECT SUBSTRING(MatchMessage,CHARINDEX(\',\', MatchMessage)+1,LEN(MatchMessage)-CHARINDEX(\',\', MatchMessage)) FROM dbo.Temp_ZiXun 

 

方案二:创建自定义函数

理论:

CREATE function [dbo].[SplitString]
(
    @Input nvarchar(max), --input string to be separated
    @Separator nvarchar(max)=\',\', --a string that delimit the substrings in the input string
    @RemoveEmptyEntries bit=1 --the return value does not include array elements that contain an empty string
)
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

实例:

DECLARE @imgColleciton VARCHAR(500),@BaseID INT,@value VARCHAR(5000)
SELECT @imgColleciton=BaseImage FROM dbo.life_fc WHERE BaseID=44 
SELECT value FROM [dbo].[SplitString](@imgColleciton,\'|\',0)

 

分类:

技术点:

相关文章:

  • 2021-12-10
  • 2021-11-30
  • 2021-11-30
  • 2021-11-30
  • 2021-11-13
  • 2021-11-30
  • 2021-12-14
  • 2020-04-25
猜你喜欢
  • 2021-11-30
  • 2021-11-30
  • 2021-11-30
  • 2021-11-30
  • 2021-12-10
  • 2021-11-30
  • 2021-11-30
相关资源
相似解决方案