sql - 从字符串/文本 SQL Server 中提取 float

标签 sql sql-server regex

我有一个数据字段,应该有 float 值(价格),但是,数据库设计者搞砸了,现在我必须在该字段上执行聚合函数。而 80% 的时间数据格式正确,例如。 “80.50”,有时会保存为“$80.50”或“$80.50 每平方米”。

数据字段为nvarchar。我需要做的是从 nvarchar 中提取 float 。我遇到了这个:Article on SQL Authority

然而,有些人可能会说,这解决了我的一半问题,或者使问题更加复杂。该函数仅返回字符串中的数字。即“每平方米 80.50 美元”将返回 80502。显然这是行不通的。我尝试将正则表达式从 => 更改为 PATINDEX('%[^0-9]%', @strAlphaNumeric) 到=> PATINDEX('%[^0-9].[^0-9]%', @strAlphaNumeric) 不起作用。任何帮助将不胜感激。

最佳答案

这将满足您的需要,已在 ( http://sqlfiddle.com/#!6/6ef8e/53 ) 上进行测试

DECLARE @data varchar(max) = '$70.23 per m2'
Select LEFT(SubString(@data, PatIndex('%[0-9.-]%', @data), 
                  len(@data) - PatIndex('%[0-9.-]%', @data) +1
                 ), 
        PatIndex('%[^0-9.-]%', SubString(@data, PatIndex('%[0-9.-]%', @data), 
                  len(@data) - PatIndex('%[0-9.-]%', @data) +1))
        )

但是正如 jpw 已经提到的,使用 CLR 的正则表达式会更好

关于sql - 从字符串/文本 SQL Server 中提取 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20116769/

相关文章:

sql-server - SQL Server 2005 Xquery 命名空间

regex - Lookbehind 和 Lookaround 概念在 TCL 正则表达式引擎中有用吗?

regex - 检查2个特定单词的正则表达式

mysql - SQL中删除字符串开头的字符

mysql - 如何达到 "select until"和

java - 使用指针 parse.com 从两个类获取相同 objectid 的数据

sql - 仅返回具有最大键的行

mysql - 使用查询查询不同的表

sql - 存储过程中一列上的两个可选参数

regex - 使用正则表达式获取最短匹配