sql如何截取字符串中前面的数字

比如字符串"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”(截取中文);

第三个参数代表截取的起始位;

第四个参数代表截取的截取的结束位。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-04
估计你是SQL Server。我没环境,不能做,给你个方法,自己试吧。

用LEN函数取长度。
用PATINDEX函数取第一个不是数字的字符位置。
二者相减得长度。
用SUBSTRING函数截取字符串。本回答被网友采纳
第2个回答  2013-06-18
如果是固定的前两位可以用LEFT函数进行截取。
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。
第3个回答  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本回答被网友采纳
第4个回答  2013-06-18
sql不好截,在代码中实现吧:
先写个判断字符是否是数字的函数,然后根据字符串的长度循环判断即可
相似回答