Sql server 从SQL Server中从给定字符串提取最后一个整数数据的最佳选择
我试图只提取字符串末尾的整数数据部分 示例:`/coronavirus/07-2020covid19/58241' 我的代码: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'))
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的答案。