SQL Server 2005 :charindex starting from the end

标签 sql sql-server string sql-server-2005

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

相关文章:

sql - MS SQL Server - 使用子查询添加计算列

mysql - 请优化多连接查询

sql-server - 如何在sql server中添加具有自动增量的主键列

java - 如何使用 java sdk 在 Azure SQL DW 中禁用地理备份策略

html - MVC : Populate a <select> from SQL Server database

mysql - 优化 5 表 SQL 查询(stores => items => words)

sql - PostgreSQL:更新前 2 行语法错误?

java - 字符串中 1 和 0 的最大交替子序列

c# - 使用 C# 查找和替换字符串中的文本

c# - 在 for 循环语句中动态创建属性名称