查找一个字符串中的数字串

简介:
在CSDN上看到的帖子,查找字符串'asdf123sdf34asfjk234'中的数字。
这是某位高人的回复。下面是我加的注释,可能会更好理解一点。
用到的几个函数的意思:
patindex: 返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
语法
PATINDEX ( '%pattern%' , expression )
参数
pattern
一个字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个和最后一个字符时除外)。pattern 是短字符数据类型类别的表达式。
expression
一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。
STUFF: 删除指定长度的字符并在指定的起始点插入另一组字符。
语法
STUFF ( character_expression , start , length , character_expression )
参数
character_expression
由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。
start
是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。
length
是一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。
ISNUMERIC:确定表达式是否为一个有效的数字类型。
语法
ISNUMERIC ( expression )
参数
expression
要计算的表达式
SUBSTRING:返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。
语法
SUBSTRING ( expression , start , length )
参数
expression
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。
start
是一个整数,指定子串的开始位置。
length
是一个整数,指定子串的长度(要返回的字符数或字节数)。
--------------------------------------------
declare @str varchar(100),@tmp varchar(101),@i int
--@str  测试字符串,@tmp 中间缓存,@i增量
set @str='asdf123sdf34asfjk234'
set @tmp=@str+'a'
while patindex('%[0-9]%',@tmp)>0--在@tmp中如果有数字,则进行下面的循环
begin
set @i=1
while 1=1
begin
if isnumeric(substring(@tmp,patindex('%[0-9]%',@tmp)+@i,1))=0 break--如果数字下一位不是数字,跳出循环
set @i=@i+1
end
print substring(@tmp,patindex('%[0-9]%',@tmp),@i)--输出数字
set @tmp=stuff(@tmp,patindex('%[0-9]%',@tmp),@i,'')--将原字符串中已经提出的字符替换为空
end
-----------------------------------------------------------------------------
下面是我去掉了一些东西,有点不明白@tmp=@str+'a'的意思。感觉没有什么必要
declare @str varchar(100),@i int,@tmp varchar(20),@a int
--@str 测试字符串,@tmp 中间缓存,@i增量
set @str='asdd'
if patindex('%[0-9]%',@str)=0--如果没有数字则跳出
 begin
    goto:aa
 end
set @tmp=''
while patindex('%[0-9]%',@str)>0--在@tmp中如果有数字,则进行下面的循环
begin
set @i=1
while 1=1
begin
if isnumeric(substring(@str,patindex('%[0-9]%',@str)+@i,1))=0 break--如果数字下一位不是数字,跳出循环
set @i=@i+1
end
set @tmp=@tmp+substring(@str,patindex('%[0-9]%',@str),@i)+','    --把提取的数字写入@tmp
set @str=stuff(@str,patindex('%[0-9]%',@str),@i,'')--将原字符串中已经提出的字符替换为空
end
select left(@tmp,len(@tmp)-1)
aa: 
print '字符串中没有数字'









本文转自 boyi55 51CTO博客,原文链接:http://blog.51cto.com/boyi55/42685,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
存储
【字符串】最长不含重复字符的子字符串
【字符串】最长不含重复字符的子字符串
|
3月前
|
C++ 索引
字符串中的第一个唯一字符(C++)
字符串中的第一个唯一字符(C++)
24 0
|
4月前
|
C++
C/C++判断字符串是否为另一字符串的子字符串
C/C++判断字符串是否为另一字符串的子字符串
54 0
|
10月前
|
索引
字符串中的第一个唯一字符
字符串中的第一个唯一字符
48 0
|
测试技术
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
56 0
判断字符串中只含有字母和问题
判断字符串中只含有字母和问题
56 0
|
Java
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
101 0
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
在一个由小写英文字母(a-z)组成的字符串中,查找最短子串,其头尾字母相同。输出最左边的该类子串。
在一个由小写英文字母(a-z)组成的字符串中,查找最短子串,其头尾字母相同。输出最左边的该类子串。
50 0
在一个由小写英文字母(a-z)组成的字符串中,查找最长子串,其头尾字母相同,且中间不包含该头尾字母,并输出最左边的该类子串
在一个由小写英文字母(a-z)组成的字符串中,查找最长子串,其头尾字母相同,且中间不包含该头尾字母,并输出最左边的该类子串
136 0
在一个小写英文字母(a-z)组成的字符串的最短子串,其包含这个字符串中出现过的所有字母,输出最左边的该类子串
在一个小写英文字母(a-z)组成的字符串的最短子串,其包含这个字符串中出现过的所有字母,输出最左边的该类子串
65 0