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

标签 sql sql-server tsql

我正在寻找从一些 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/

相关文章:

sql - 根据今年今天、本周、本月、本季度汇总销售额的最快方法?

sql-server - TSQL - 带有复合键的 MERGE 语句

sql - 如何从 SQL Server 发送电子邮件?

sql - 如何避免在mysql中的SELECT之前写入模式名​​称?

php - 获取日期格式未知的两个日期之间的数据

sql-server - SQL Server 修剪功能

mysql - 不确定我是否正确地执行了 sql 查询

sql - 数据库关系

sql - 从一个表中选择值,其中排除另一个表中的值

sql-server - 找不到 sqlcmd.exe(SQL SERVER 2017)