Sql server 从SQL Server中从给定字符串提取最后一个整数数据的最佳选择

Sql server 从SQL Server中从给定字符串提取最后一个整数数据的最佳选择,sql-server,Sql Server,我试图只提取字符串末尾的整数数据部分 示例:`/coronavirus/07-2020covid19/58241' 我的代码: select reverse(substring(reverse('/coronavirus/07-2020covid19/58241'), 1 , patindex('%/%', reverse('/coronavirus/07-2020covid19/58241'))

我试图只提取字符串末尾的整数数据部分

示例:`/coronavirus/07-2020covid19/58241'

我的代码:

select  
    reverse(substring(reverse('/coronavirus/07-2020covid19/58241'),
                      1 ,
                      patindex('%/%', reverse('/coronavirus/07-2020covid19/58241')) - 1))
输出:
58241

上述语句的执行统计信息:


我只是想知道这样做的最佳方式,因为我有大约2550万行。因此,我基本上是在寻找SQL Server上负载较小的最佳快速解决方案。

一种方法是拆分字符串:

select s.value
from string_split('/coronavirus/07-2020covid19/58241', '/') s
where '/coronavirus/07-2020covid19/58241' like '%/' + s.value;
如果您还想输入它是一个数字,您可以添加:

s.value not like '%[^0-9]%'
如果这是表中的一列,您可以使用
apply

select t.*, s.value
from t cross apply
     split_part(t.col) s
where t.col like '%/' + s.value;
另一种方法查找最后一个
'/'
。我会使用
stuff()


一种方法是拆分字符串:

select s.value
from string_split('/coronavirus/07-2020covid19/58241', '/') s
where '/coronavirus/07-2020covid19/58241' like '%/' + s.value;
如果您还想输入它是一个数字,您可以添加:

s.value not like '%[^0-9]%'
如果这是表中的一列,您可以使用
apply

select t.*, s.value
from t cross apply
     split_part(t.col) s
where t.col like '%/' + s.value;
另一种方法查找最后一个
'/'
。我会使用
stuff()


谢谢Gordon,我想这些是MySQL语法。我可以试试SQL server的
功能
是一个T-SQL函数,@Shivkumarkondi<然而,代码>分割部分并非如此,Gordon似乎不一致地为其提供了一个或两个参数。也许他的意思是
STRING\u SPLIT
,然而,这需要两个参数,就像在他的第一个示例中一样。@Shivkumarkondi。我不知道为什么我的手指键入
split\u part()
而不是
string\u split()
。问题被标记为SQL Server,我希望这是SQL Server的答案。谢谢Gordon,我认为这些是MySQL语法。我可以试试SQL server的
功能
是一个T-SQL函数,@Shivkumarkondi<然而,代码>分割部分并非如此,Gordon似乎不一致地为其提供了一个或两个参数。也许他的意思是
STRING\u SPLIT
,然而,这需要两个参数,就像在他的第一个示例中一样。@Shivkumarkondi。我不知道为什么我的手指键入
split\u part()
而不是
string\u split()
。这个问题被标记为SQL Server,我打算将其作为SQL Server的答案。