小编典典

SQL Server 2005:charindex从头开始

sql

我有一个字符串“ 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”。

有人有个好主意吗?


阅读 195

收藏
2021-03-17

共1个答案

小编典典

你需要做什么呢?给定分隔符的最后一次出现后,您是否需要抓住字符?

如果是这样:反转字符串并使用普通的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确实很强大。

2021-03-17