delphi memo 查找字符 下行插入_数据库大师成长日记:巧用SQL解析字符串中的数字部分...

近日写SQL脚本时,碰到这样的问题,需要从字符串中将数字部分解析出来。这本身并不是一个很复杂的问题,但如何使用简短的SQL语句实现还是需要研究一番的。

6561425b42c7a7302d8c3ec2fb952590.png

最容易想到的方法,就是将字符串按位从头到尾检查一遍,碰到数字部分就记录下来,这种方式原理非常简单,我之前曾经写过一篇按照这种逻辑解析字符串的文章《对字符串另类解析实现复杂功能》,有兴趣的朋友可以参阅一下,我这里就不再赘述了。

今天我们另辟蹊径,直接使用SQL Server内置函数来实现,这里用到的函数主要包括patindexstuff两个,我们先来看看两个函数的含义。

PATINDEX:通过模式匹配查找位置

patindex返回模式在指定表达式中第一次出现的起始位置,如果在所有有效的文本和字符数据类型中都找不到该模式,则返回零。

patindex的语法格式为:

PATINDEX('%pattern%' ,expression)

pattern参数就是包含要查找的序列的字符表达式。可以使用通配符,但pattern之前和之后必须有%字符(搜索第一个或最后一个字符时除外)。pattern最多包含8000个字符。

expression是一个字符串表达式,通常是针对指定模式搜索的列。

返回类型:一般为 int。

STUFF:将字符串插入到另一个字符串中

stuff函数实现将字符串插入到另一个字符串中。它从第一个字符串的开始位置删除指定长度的字符,然后将第二个字符串插入到第一个字符串的开始位置

stuff的语法格式为:

STUFF(expression1 , start , length , expression2) 

expression1和expression2均为字符数据的表达式。可以是常量、变量,也可以是字符列或二进制数据列。expression1为待被插入的字符串,expression2为插入字符串。如果expression2为'',则执行效果就等于是直接按照后续参数设定删除了。

start是一个整数值,指定删除和插入的开始位置。

length是一个整数,指定要删除的字符数。

了解了两个函数的含义,我们就可以开始工作了。

综合运用实现从字符串中解析出数字

先上脚本:

declare @data nvarchar(max)=N'现在是2019年03月08日';while patindex('%[^0-9]%',@data)>0 begin  set @data=stuff(@data,patindex('%[^0-9]%',@data),1,'');end print @data;

脚本中使用了while循环,循环中止条件为不存在数字,patindex('%[^0-9]%',@data)这里使用了模式匹配^0-9的含义为非数字意思。循环体中的stuff函数,将非数字部分替换为空字符串,等于匹配到的非数字部分被清除掉了。

结果可参考下图:

be00567932f15b80a14b45e396dc54de.png

从上图可以看出,解析出来的刚好就是字符串中包含的数字部分。脚本稍微改造一下,可作为一个自定义函数,那您在调用的时候就简单多了。

希望对您有所帮助!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值