ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql 拆分函数,相当于程序里面得数组

2022-01-06 17:32:44  阅读:221  来源: 互联网

标签:SET varchar 数组 拆分 start location str sql DECLARE


---------------------------可以拆分成多少个---------------

create FUNCTION [dbo].[Get_StrArrayLength]

( @str varchar(5000) ,  --要分割的字符串

  @split varchar(10)  --分隔符号

  )

RETURNS int

AS

BEGIN

    DECLARE @location INT

    DECLARE @start INT

    DECLARE @length INT

    SET @str = LTRIM(RTRIM(@str))

    SET @location = CHARINDEX(@split, @str)

    SET @length = 1

    WHILE @location <> 0

        BEGIN

            SET @start = @location + 1

            SET @location = CHARINDEX(@split, @str, @start)

            SET @length = @length + 1

        END

    RETURN @length

END

---------------------------根据 拆分个数,获取 第几个 ---------------

SET QUOTED_IDENTIFIER ON

GO

create FUNCTION [dbo].[Get_StrArrayStrOfIndex]

( @str varchar(5000) ,  --要分割的字符串

  @split varchar(10) ,  --分隔符号

  @index int --取第几个元素

  )

RETURNS varchar(5000)

AS

BEGIN

    DECLARE @location INT

    DECLARE @start INT

    DECLARE @next INT

    DECLARE @seed INT

    SET @str = LTRIM(RTRIM(@str))

    SET @start = 1

    SET @next = 1

    SET @seed = LEN(@split)

    SET @location = CHARINDEX(@split, @str)

    WHILE @location <> 0

        AND @index > @next

        BEGIN

            SET @start = @location + @seed

            SET @location = CHARINDEX(@split, @str, @start)

            SET @next = @next + 1

        END

    IF @location = 0

        SELECT  @location = LEN(@str) + 1

    RETURN SUBSTRING(@str,@start,@location-@start)

END

---------------------------------------- 利用上面的 两个函数,进计算 

ALTER FUNCTION GetApplyScore( @Str varchar(8000), @FGF varchar(50))

RETURNS decimal(18,2)

AS

BEGIN

declare @StrLen int ,@XH int,@RetScore decimal(18,2),@ParamStr varchar(500),@ParamStrScore decimal(18,2)

select @StrLen=dbo.Get_StrArrayLength(@Str,@FGF) ,@XH=0,@RetScore=0

if( @StrLen>0)

begin 

  while @XH<@StrLen

begin

set @XH=@XH+1

select @ParamStr=dbo.Get_StrArrayStrOfIndex(@Str,@FGF,@XH)

select @ParamStrScore=dbo.Get_StrArrayStrOfIndex(REPLACE(@ParamStr,' ','|'),'|',3)

    set @RetScore=@RetScore+ISNULL(@ParamStrScore,0)

end

end  

return @RetScore

END

GO

标签:SET,varchar,数组,拆分,start,location,str,sql,DECLARE
来源: https://blog.csdn.net/net744933700/article/details/122348797

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有