我希望使用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模式进行匹配?
最佳答案
我前一段时间在博客上写过这个。
Extracting numbers with 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
关于sql - 使用PATINDEX在T-SQL中查找不同的长度模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9772566/