sql常用字符串处理


--将字符串转换Table

ALTER FUNCTION [dbo].[StringToTable]

(
    /**//* 根据输入的@ParamIDList列表来生Name列表*/
   @ParamIDList Varchar(5000),
  @ParamChar varchar(100) --分割符
)
RETURNS @Table_NameList table ( Name Varchar(200))  -- 建立表变量
AS
BEGIN
     --Declare @Table_NameList table ( Name Varchar(20))  -- 建立表变量
     Declare @Index_Param int   /**//*参数 记录分隔符的位置*/
    Declare @NeedParse varchar(5000) /**//*参数 没有处理的字符串*/

    Select  @Index_Param=CharIndex(@ParamChar, @ParamIDList)
    if (@Index_Param=0)
    begin        /**//*一个名字组成*/
              insert into @Table_NameList (Name) values(@ParamIDList)
      end
    else     /**//*存在多个名字*/
        begin
             set @NeedParse =@ParamIDList
             while (CharIndex(@ParamChar, @NeedParse)>0)
                 begin
                          insert into @Table_NameList (Name) values(SubString(@NeedParse,1,CharIndex(@ParamChar,@NeedParse)-1))
                        set @NeedParse =SubString(@NeedParse,CharIndex(@ParamChar, @NeedParse)+1,len(@NeedParse)-CharIndex(@ParamChar, @NeedParse))
            end
        insert into @Table_NameList (Name) values(@NeedParse)
    end
--select * from @Table_NameList
    RETURN

END

--使用临时性分拆辅助表法
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


--截取字符串出现的第几次数据

declare @sIncludeParaMDL varchar(1000),@nPosi int,@nPosi1 int,@nPosi2 int
set @sIncludeParaMDL='62.98 242.17 74.51 253.72 5.11 184.27 82.29 261.47 71.69 250.90 59.70 238.89 58.83 238.01 28.70 207.85 106.46 285.65 62.56 241.71 '
select @nPosi =charindex(' ',@sIncludeParaMDL,1)

select @nPosi1=1
select @nPosi2=1
while @nPosi>0
begin
        --这里是地几个空格
    if(@nPosi2=18)
    select   substring(@sIncludeParaMDL,1,@nPosi)    
    --这里是第17个到18之间的数
    if(@nPosi2=18)
    select   substring(@sIncludeParaMDL,@nPosi1,@nPosi-@nPosi1)    
    --select @nPosi,@nPosi1,@nPosi2
    
    select @nPosi1 = @nPosi+1,@nPosi2=@nPosi2+1
    select @nPosi =charindex(' ',@sIncludeParaMDL,@nPosi1)
    
end



--字符串出现的次数

1:设有字符串str1 str2 ,现在要求str1 在 str2中出现的次数。

    2:将str1后面加上一个字符,如:str1+'_',设更改后的字符串為str3。

    3:在str2中如果有子串str1 ,将之替换成str3,替换后的字符串设為str4。

    4:str4与str2的长度之差即為str1在str2中出现的次数。

看下面这个函数
CREATE  function fn_SCountOneWordOnOtherWord
(
    
@Word NVARCHAR(200),
    
@WordAll NVARCHAR(2000)
)
RETURNS CHAR(4)
AS
BEGIN
    
RETURN  len(replace(@WordAll,@Word,@Word+'_'))-len(@WordAll)
END



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值