SQL提取含单位数字:正则与字符串函数结合解析实例

创始人
2024-12-23 21:15:03
0 次浏览
0 评论

你可以使用正则表达式以及一些字符串函数来提取SQLServer中包含计量单位的数字。

通过正则表达式和字符串函数提取SQLServer中包含测量单位的数字下面是一个示例。
假设有一个字符串列string_col,其中包含数字和计量单位,例如“20米”,“10厘米”,“5.5公里”等,我们可以使用以下查询语句将其提取出来:首先,使用`PATINDEXfunction()`查找包含数字的子字符串的开头,然后使用`SUBSTRING()`函数提取数字字符串。
接下来,找到子字符串后的第一个非数字字符以确定数字结束的位置。
最后,使用“CAST()”函数将数字字符串转换为浮点数,然后使用“SUBSTRING()”函数提取字符串的度量单位。
该查询语句的原理是基于计量单位始终位于数字之后的假设。
如果数字和计量单位之间存在其他字符,查询结果可能不准确。
另外,如果查询中包含不同类型的计量单位,处理逻辑也必须作相应修改。

PL/SQL提取某个字段第一个出现的数字。例如从'商501啊啊'中提取出'5',要求提取出的值为int型。

两种方法--1selectmeaning('商501啊','0123456789'||'商501啊','0123456789'),1,1)fromDual;--2正则表达式subselect(regexp_replace('商501啊','[^0-9]'),1,1)from2;

在SQL语句中如何用正则取出一个字符串的前几位数字

SQL使用字符串的前几位,SQL关键字“substring”。

有关使用“substring”的信息,请参阅以下SQL:

declare@Tnvarchar(10)

set@T='12345abcde'

selectsubstring(@T,1,5)

结果如下:12345

在SQL中编写正则表达式时,只能使用存储过程来处理

像这样的SQL:

CREATEFUNCTIONdbo.(5000),-需要匹配的源字符串@regexpvarchar(1000),-正则表达式@ignorecasebit=0-是否区分大小写,默认值为“false”)RETURNSbit-返回结果0-false,1-trueASBEGIN--0(成功),或非零数字(错误),它是OLE值返回的HRESULT的整数-自动化对象。
DECLARE@hrinteger-用于存储返回的对象标记,以便对该对象进行后续操作。
DECLARE@objRegExpintegerDECLARE@objMatchesinteger–保存结果。
DECLARE@resultsbit/*创建只能由系统管理员固定服务器角色的成员运行的OLE对象实例sp_OACreate,

并确保计算机上存在VBScript.RegExp类库给出*/EXEC@hr=sp_OACreate'VBScript.RegExp',@objRegExpOUTPUTIF@hr<>0BEGINSET@results=0RETURN@resultsEND/*以下三个旨在设置新对象的三个属性。
以下是VBScript.RegExp中常用的属性示例:DimregEx、Match、Matches、CreateVariables。
SetregEx=NewRegExp'创建通用表达式。
regEx.Pattern=patrn'设置模式。
regEx.IgnoreCase=True'指定是否区分大小写。
regEx.Global=True"设置全局可用性。
"setMatches=regEx.Execute(string)'重复匹配集RegExpTest=regEx.Execute(strng)'执行搜索。
foreachmatchinmatches'重复匹配集RetStr=RetStr&"Matchfoundatposition"RetStr=RetStr&Match.FirstIndex&".MatchValueis'"RetStr=RetStr&Match.Value&"'."&vbCRLFNextRegExpTest=RetStr*/EXEC@hr=sp_OASetProperty@objRegExp,'模式',@regexpIF@hr<>0BEGINSET@results=0RETURN@resultsENDEXEC@hr=sp_OASetProperty@objRegExp,'全局',falseIF@hr<>0BEGINSET@results=0RETURN@resultsENDEXEC@hr=sp_OASetProperty@objRegExp,'IgnoreCase',@ignorecaseIF@hr<>0BEGINSSET@results=0RETURN@resultsEND--调用对象方法EXEC@hr=sp_OAMethod@objRegExp,'Test',@resultsOUTPUT,@sourceIF@hr<>0BEGINSET@results=0RETURN@resultsEND-释放创建的OLE对象。
EXEC@hr=sp_OADestroy@objRegExpIF@hr<>0BEGINSET@results=0RETURN@resultsENDRETURN@resultsEND

热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...