我正在尝试获取给定字符串中的最后一个数字部分。
例如,下面是给定的字符串,结果应该只是最后一个数字部分
如何实现此功能。请帮忙。
答案 0 :(得分:4)
试试这个:
select right(@str, patindex('%[^0-9]%',reverse(@str)) - 1)
<强>解释强>
使用PATINDEX和'%[^0-9]%'
作为搜索模式,您可以获得不数字第一次出现的起始位置
使用REVERSE
,您可以从字符串后面开始获取第一个非数字字符的位置。
修改强>
要处理不包含非数字字符的字符串,可以使用:
select case
when patindex(@str, '%[^0-9]%') = 0 then @str
else right(@str, patindex('%[^0-9]%',reverse(@str)) - 1)
end
如果您的数据总是包含至少一个非数字字符,那么您可以使用第一个查询,否则使用第二个查询。
实际查询:
所以,如果你的表是这样的:
mycol
--------------
SB124197
287276ACBX92
R009321743-16
123456
然后您可以使用以下查询(适用于SQL Server 2012 +):
select iif(x.i = 0, mycol, right(mycol, x.i - 1))
from mytable
cross apply (select patindex('%[^0-9]%', reverse(mycol) )) as x(i)
<强>输出:强>
mynum
------
124197
92
16
123456
答案 1 :(得分:1)
以下是使用Patindex
SELECT RIGHT(strg, COALESCE(NULLIF(Patindex('%[^0-9]%', Reverse(strg)), 0) - 1, Len(strg)))
FROM (VALUES ('SB124197'),
('287276ACBX92'),
('R009321743-16')) tc (strg)
在反转字符串后,我们找到第一个非数字字符的位置,并从该位置提取数据直到结束。
结果:
-----
124197
92
16