我有一个字符串“some.file.name”,我想抓取“some.file”。
为此,我需要找到最后一次出现的“.”在一个字符串中。
我的解决方案是:
declare @someStr varchar(20)
declare @reversedStr varchar(20)
declare @index int
set @someStr = '001.002.003'
set @reversedStr = reverse(@someStr)
set @index = len(@someStr) - charindex('.',@reversedStr)
select left(@someStr,@index)
嗯,是不是太复杂了?我只是想在 where 子句中使用“some.file”。
大家有什么好主意吗?
最佳答案
你需要用它做什么?您是否需要抓取最后一次出现给定分隔符之后的字符?
如果是这样:反转字符串并使用普通的 CHARINDEX 进行搜索:
declare @test varchar(100)
set @test = 'some.file.name'
declare @reversed varchar(100)
set @reversed = REVERSE(@test)
select
REVERSE(SUBSTRING(@reversed, CHARINDEX('.', @reversed)+1, 100))
您将返回“some.file” - 直到最后一个“.”的字符。在原始文件名中。
SQL Server 中直接没有“LASTCHARINDEX”或类似的东西。您可能会考虑在 SQL Server 2005 及更高版本中做一个很棒的 .NET 扩展库,并将其作为程序集部署到 SQL Server 中 - T-SQL 在字符串操作方面不是很强,而 .NET 确实很强。
关于SQL Server 2005 :charindex starting from the end,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1851650/