我有一个数据字段,应该有 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/