sql如何截取字符串中前面的数字
比如字符串"23成立dfgdf46456"我只是想要前面的23后面就全不要,但不知道前面的数字几位,而且要第一个为数字才可以...
比如字符串"23成立dfgdf46456"我只是想要前面的23后面就全不要,但不知道前面的数字几位,而且要第一个为数字才可以
展开
展开全部
如果提取字符串中的数字,需要自定义函数,以下函数包含截取字符串中的数字、字母、汉字等。
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”(截取中文);
第三个参数代表截取的起始位;
第四个参数代表截取的截取的结束位。
推荐于2018-03-04
展开全部
估计你是SQL Server。我没环境,不能做,给你个方法,自己试吧。
用LEN函数取长度。
用PATINDEX函数取第一个不是数字的字符位置。
二者相减得长度。
用SUBSTRING函数截取字符串。
用LEN函数取长度。
用PATINDEX函数取第一个不是数字的字符位置。
二者相减得长度。
用SUBSTRING函数截取字符串。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-18
展开全部
如果是固定的前两位可以用LEFT函数进行截取。
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-18
展开全部
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
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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-18
展开全部
sql不好截,在代码中实现吧:
先写个判断字符是否是数字的函数,然后根据字符串的长度循环判断即可
先写个判断字符是否是数字的函数,然后根据字符串的长度循环判断即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询