我有一个字符串“ 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)
好吧,这不是很复杂吗?我只是打算在一个子句中使用“ 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确实很强大。