我希望使用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/

10-12 17:32