微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

T-SQL从字符串中提取十进制值

如何解决T-SQL从字符串中提取十进制值

另一种方法删除字符串之后和字符串之前的字符。下面的表达式可以做到这一点:

select val, 
       stuff(stuff(val+'x', patindex('%[0-9][^0-9.]%', val+'x') + 1, len(val), ''
                  ), 1, patindex('%[0-9]%', val) - 1, '')
from (values ('test123 xxx'), ('123.4'), ('123.4yyyyy'), ('tasdf 8.9'), ('asdb'), ('.2345')) as t(val);

内部stuff()删除数字后面的字符。的+'x' 处理时的数量为在字符串的末尾时出现的问题。第一部分处理编号之前的部分。

这确实假定字符串中只有一个数字。您可以使用where子句检查此内容,例如:

where val not like '%[0-9]%[^0-9.]%[0-9]%'

解决方法

好的,所以我想做的是从字符串中提取十进制值。我的问题是字符串不统一。有些可能是6.9%或5.2mg /
L,有些可能根本没有数值。我想做的是仅从字符串中返回十进制(或整数)值,如果该值不存在,则返回NULL。

我已经尝试过此功能:

CREATE FUNCTION dbo.udf_GetNumeric
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%',@strAlphaNumeric)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @strAlphaNumeric = STUFF(@strAlphaNumeric,@intAlpha,1,'' )
SET @intAlpha = PATINDEX('%[^0-9]%',@strAlphaNumeric )
END
END
RETURN ISNULL(@strAlphaNumeric,0)
END

但这只会返回没有小数位的数字。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。