我正在寻找从一些 varchar 中提取 float ,使用 PATINDEX() 来发现它们。我知道在每个 varchar 字符串中,我只对存在的第一个 float 感兴趣,但它们可能有不同的长度。
例如
'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/