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

简介:
在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,如需转载请自行联系原作者
目录
相关文章
|
存储 传感器 编解码
中科星图——MOD11A1 V6数据集(Terra星搭载的中分辨率成像光谱仪获取的地表温度/发射率(LST/E)产品)
中科星图——MOD11A1 V6数据集(Terra星搭载的中分辨率成像光谱仪获取的地表温度/发射率(LST/E)产品)
336 5
|
9月前
|
机器学习/深度学习 存储 测试技术
YOLOv11改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
YOLOv11改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
358 13
YOLOv11改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
|
JavaScript 开发者
Nodejs-nrm:快速切换npm源 / npm官方源和其他自定义源之间切换
Nodejs-nrm:快速切换npm源 / npm官方源和其他自定义源之间切换
1571 0
|
人工智能 监控 安全
数字化施工:解决传统施工难题,提高施工效率和质量的行业革命
建筑行业是我国国民经济的重要组成部分,也是支柱性产业之一。然而,建筑业同时也是一个安全事故多发的高风险行业。如何加强施工现场的安全管理,降低事故发生的频率,避免各种违规操作和不文明施工,提高建筑工程的质量,是各级政府部门、行业人士和广大学者亟待解决的重要课题。
数字化施工:解决传统施工难题,提高施工效率和质量的行业革命
|
机器人 Linux 异构计算
实例1:控制树莓派板载LED灯闪烁
本文是一个关于如何使用Python编程控制树莓派板载LED灯闪烁的实验教程,涵盖了树莓派的基本概念、LED控制文件的读写操作、Python `open()` 和 `sleep()` 函数的使用方法,以及具体的实验步骤和代码实现,目的是让读者通过实践熟悉树莓派操作和Linux文件读写。
442 1
实例1:控制树莓派板载LED灯闪烁
|
负载均衡 持续交付 Docker
Docker的应用场景有哪些?
Docker的应用场景有哪些?
526 6
|
人工智能 搜索推荐 API
langchain 入门指南 - 让 AI 从互联网获取信息
langchain 入门指南 - 让 AI 从互联网获取信息
371 1
|
消息中间件 数据采集 监控
中间件数据集成
【7月更文挑战第7天】
332 4
|
Linux 持续交付 开发工具
版本控制系统的选择:Git vs. Mercurial
【6月更文挑战第20天】Git vs. Mercurial: 两者都是流行的DVCS,Git由Linus Torvalds创建,以其速度和复杂分支管理著称,适合大型项目和有经验的开发者。Mercurial,由Matt Mackall开发,以其简洁命令行和易用性吸引初学者。Git社区更大,扩展更丰富,而Mercurial在某些场景下可能更直观。选择取决于项目需求、团队经验和偏好。
|
文字识别 数据可视化 BI
OCR 文字检测,可微的二值化(Differentiable Binarization --- DB)
OCR 文字检测,可微的二值化(Differentiable Binarization --- DB)
188 0