SQL server查询:删除两个字符的最后一个索引之间的文本?

Sea*_*een 0 sql t-sql sql-server

问题

我有一个存储文件密钥的字段,例如:

dev/application/document_type_name/document 12345-67890_123.pdf

我需要选择没有数字的键,所以值如下所示:

dev/application/document_type_name/document 12345-67890_.pdf

潜在战略

我已经有一段时间了,因为我已经完成了T-SQL但是来自.NET方面,我认为总体策略是:

  • 获取下划线字符的最后一个索引
  • 获取句点字符的最后一个索引.
  • 用空白替换这两个字符之间的值.

在C#中,我认为它会是这样的:

var test = "dev/application/document_type_name/document 12345-67890_123.pdf"
var indexOfUnderscore = test.LastIndexOf("_");
var indexOfPeriod = test.LastIndexOf(".");
var textToReplace = subtring(indexOfUnderscore + 1, indexOfPeriod -1);
var output = test.Replace(textToReplace, String.Empty);
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 每个密钥都将具有该格式
  • 下划线和句点之间的值的长度可以不同(可以是1,12345等.
  • 最终结果应保持下划线和句号

pod*_*ska 5

尝试

select left(@s,len(@s)-charindex('_',REVERSE(@s)))+'_.pdf'
Run Code Online (Sandbox Code Playgroud)

@s你的字符串在哪里 或者,如果文件扩展名可以更改

select left(@s,len(@s)-charindex('_',REVERSE(@s))+1) 
     + right(@s,charindex('.',REVERSE(@s)))
Run Code Online (Sandbox Code Playgroud)