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

比如字符串"23成立dfgdf46456"我只是想要前面的23后面就全不要,但不知道前面的数字几位,而且要第一个为数字才可以... 比如字符串"23成立dfgdf46456"我只是想要前面的23后面就全不要,但不知道前面的数字几位,而且要第一个为数字才可以 展开
 我来答
badkano
推荐于2016-07-16 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885359
团长

向TA提问 私信TA
展开全部

如果提取字符串中的数字,需要自定义函数,以下函数包含截取字符串中的数字、字母、汉字等。

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函数截取字符串。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-18
展开全部
如果是固定的前两位可以用LEFT函数进行截取。
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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-18
展开全部
sql不好截,在代码中实现吧:
先写个判断字符是否是数字的函数,然后根据字符串的长度循环判断即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式