sql如何截取字符串中前面的数字
发布网友
发布时间:2022-04-30 04:29
我来回答
共6个回答
热心网友
时间:2022-04-08 09:01
如果提取字符串中的数字,需要自定义函数,以下函数包含截取字符串中的数字、字母、汉字等。
create function fn_myget
(@str as varchar(max),
@category as varchar(10)='Chinese',
@start as int=1,
@end as int=100000)
returns varchar(max)
as
begin
declare @i int=@start
declare @lenstr int=len(@str)
declare @str1 varchar(max)
declare @strre varchar(max)=''
while @i<=@lenstr and @i<=@end
begin
set @str1=substring(@str,@i,1);
--提取汉字
if(@Category='Chinese')
begin
if(len(@str1)!=datalength(@str1))
set @strre=@strre+@str1
end
--提取字母
else if(@Category='Letters')
begin
if((ascii(@str1)>=65 and ascii(@str1)<=90 or ascii(@str1)>=97 and ascii(@str1)<=122))
set @strre=@strre+@str1
end
--提取数字
else if(@Category='Digital')
begin
if(ascii(@str1)>=48 and ascii(@str1)<=57)
set @strre=@strre+@str1
end
else
set @strre='输入错误'
set @i=@i+1
end
return(@strre)
end
测试:
1、截取字符串dsajf23423423中的数字
select dbo.fn_myget('dsajf23423423','Digital',1,1000)
结果:
2、截取字符串dsajf23423423中的字母
select dbo.fn_myget('dsajf23423423','Letters',1,1000)
结果:
3、截取“说多了几分134lljjf爱”中的中文
select dbo.fn_myget('说多了几分134lljjf爱','Chinese',1,1000)
结果:
自定义函数说明:
函数共需要4个参数:
第一个参数是要截取的字符串;
第二个参数根据要截取的内容不同,分别有“Digital”(截取数字)、“Letters”(截取字母)、“Chinese”(截取中文);
第三个参数代表截取的起始位;
第四个参数代表截取的截取的结束位。
热心网友
时间:2022-04-08 10:19
估计你是SQL Server。我没环境,不能做,给你个方法,自己试吧。
用LEN函数取长度。
用PATINDEX函数取第一个不是数字的字符位置。
二者相减得长度。
用SUBSTRING函数截取字符串。
热心网友
时间:2022-04-08 11:53
如果是固定的前两位可以用LEFT函数进行截取。
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。
热心网友
时间:2022-04-08 13:45
declare @str nvarchar(1000)
set @str='234565成立dfgdf46456'
declare @temp int,@result nvarchar(1000)
select @temp=1,@result=''
while @temp<=len(@str)
begin
if ISNUMERIC(substring(@str,@temp,1)) = 1
begin
set @result = @result + substring(@str,@temp,1)
end
else if @result <> ''
begin
break
end
set @temp = @temp + 1
end
select @result
热心网友
时间:2022-04-08 15:53
sql不好截,在代码中实现吧:
先写个判断字符是否是数字的函数,然后根据字符串的长度循环判断即可
热心网友
时间:2022-04-08 18:17
substring(string, length) 函数就行了 两个长度就行了