一尘不染

使用PATINDEX在T-SQL中查找不同的长度模式

sql

我希望使用PATINDEX()将浮点数从某些varchars中拉出来。我知道在每个varchar字符串中,我只对存在的第一个浮点数感兴趣,但是它们的长度可能不同。

例如

'some text 456.09 other text'
'even more text 98273.453 la la la'

我通常会用正则表达式来匹配它们

  "[0-9]+[.][0-9]+"

但是,我找不到PATINDEX接受的+运算符的等效项。因此,它们需要分别与以下项匹配:

'[0-9][0-9][0-9].[0-9][0-9]' and '[0-9][0-9][0-9][0-9][0-9].[0-9][0-9][0-9]'

有什么方法可以将这两个示例varchar与一个有效的PATINDEX模式进行匹配?


阅读 141

收藏
2021-03-10

共1个答案

一尘不染

我前一段时间在博客上写过这个。 使用SQL
Server提取数字

Declare @Temp Table(Data VarChar(100))

Insert Into @Temp Values('some text 456.09 other text')
Insert Into @Temp Values('even more text 98273.453 la la la')
Insert Into @Temp Values('There are no numbers in this one')

Select Left(
             SubString(Data, PatIndex('%[0-9.-]%', Data), 8000),
             PatIndex('%[^0-9.-]%', SubString(Data, PatIndex('%[0-9.-]%', Data), 8000) + 'X')-1)
From   @Temp
2021-03-10