sql 截取字符串与 截取字符串最长的字符串

时间:2022-01-30 09:03:12
1 declare @str nvarchar(50);
2 set @str='aa,32,22,55,7';
3 select charindex(',',@str,1) as '第一个逗号的索引值'
4 select replace(replace(LEFT(@str,charindex(',',@str,1)-1),char(9),''),char(32),'') as '第一个值'
5 select SUBSTRING(@str,charindex(',',@str,1)+1,len(@str)) as '从第一逗号开始截取出后面的字符串'

 

截取字符串最长的字符串,用的是自定义函数

 

 1 ALTER function [dbo].[fun_ecom_string]
 2 (
 3     @str varchar(500),--传入的字符串
 4     @str2 varchar(50) --调用时候给空值,这个是用来保存最长字符串值的
 5 )
 6 returns varchar(50) as
 7 begin
 8     declare @result varchar(50)
 9     SET @str=replace(replace(@str,char(9),''),char(32),'')
10     SET @result=@str
11     --第一个逗号的索引值
12      if charindex(',',@str,1)=0 and len(@str2)=0
13          begin
14              SET @result=@str
15          end
16     else if charindex(',',@str,1)=0 and len(@str2)>0 
17         begin
18             if len(@result)<len(@str2)
19             begin
20                 SET @result=@str2
21             end
22         end
23      else
24          begin
25              SET @result=LEFT(@str,charindex(',',@str,1)-1) --第一个值
26              if len(@result)>len(@str2)
27              begin
28                  SET @str2=@result
29              end
30 
31              SET @str=SUBSTRING(@str,charindex(',',@str,1)+1,len(@str))--从第一逗号开始截取出后面的字符串
32              SET @result=dbo.fun_ecom_string(@str,@str2)
33          end
34             
35 
36     return @result
37 end

调用测试结果:

select [dbo].[fun_ecom_string]
('98997378119101444444444443,503180004665,503144444444800046651,18919173781191013','')

--结果:98997378119101444444444443

 

 

取字符串 以逗号 隔开中 最长的字符串 并且字符串是数字型的
ALTER function [dbo].[fun_ecom_string]
(
/*
取字符串 以逗号 隔开中 最长的字符串 并且字符串是数字型的
  ISNUMERIC 判断字符串是否为数字
*/
    @str varchar(500),--传入的字符串
    @str2 varchar(50) --调用时候给空值,这个是用来保存最长字符串值的
)
returns varchar(50) as
begin
    declare @result varchar(50)
    SET @str=replace(replace(@str,char(9),''),char(32),'')
    --SET @result=@str
    --第一个逗号的索引值
     if charindex(',',@str,1)=0 and len(@str2)=0
         begin
             SET @result=@str
         end
    else if charindex(',',@str,1)=0 and len(@str2)>0 
        begin
            if ISNUMERIC(@result)=0 
            begin
                SET @result=@str2
            end
            else if ISNUMERIC(@result)=1 and len(@result)<len(@str2)
            begin
                SET @result=@str2
            end
        end
     else
         begin
             SET @result=LEFT(@str,charindex(',',@str,1)-1) --第一个值
             if len(@result)>len(@str2) and ISNUMERIC(@result)=1 --ISNUMERIC 判断字符串是否为数字
             begin
                 SET @str2=@result
             end

             SET @str=SUBSTRING(@str,charindex(',',@str,1)+1,len(@str))--从第一逗号开始截取出后面的字符串
             SET @result=dbo.fun_ecom_string(@str,@str2)
         end
            

    return @result
end