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
SQL2000数据库备份压缩技巧:优化空... 怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...

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

3
SQL字符串处理技巧:单引号使用与转义标... SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...

4
Windows环境下Redis安装指南与... redis安装windowsredis基本简介与安装安装Redis首先需要获取安...

5
深度解析:Redis性能优势与局限性,助... redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...

6
深入解析:MySQL数据库的特性与应用 mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...

7
CentOS 7.2系统下Redis安装... 怎么装redis?为了部署项目,很多公司选择使用Linux服务器,但Redis官...

8
SQL Server 2008中高效添加... 求教在sqlserver2008中的表中怎么添加一列自增的列?1.例如,在表中添...

9
Ubuntu部署MySQL与Redis:... ubuntu安装mysql和redis开放远程连接在Ubuntu系统中安装MyS...

10
Linux Redis缓存清理与启动指南 linux下清理redis缓存如果升级程序后在Linux环境中使用Redis缓存...