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

时间:2023-03-09 08:43:29
sql 截取字符串与 截取字符串最长的字符串
 declare @str nvarchar(50);
set @str='aa,32,22,55,7';
select charindex(',',@str,1) as '第一个逗号的索引值'
select replace(replace(LEFT(@str,charindex(',',@str,1)-1),char(9),''),char(32),'') as '第一个值'
select SUBSTRING(@str,charindex(',',@str,1)+1,len(@str)) as '从第一逗号开始截取出后面的字符串'

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

 ALTER function [dbo].[fun_ecom_string]
(
@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 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)
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

调用测试结果:

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