删除最后一个重复字符后的字段文本

在T-SQL中,是否有一种方法可以使字段返回所有文本(包括)可能重复的字符? 可以重复的字符是“ – ”。 我可以在Excel中实现这一点,但是在查询级别上执行此操作会更好。 这里是我想看到这个字段(part.partnum)的例子:

| Part.partnum | Result | | H24897-D-001 | H24897-D- | | BHF44-82-V-1325 | BHF44-82-V- | | BKNG5222 | BKNG5222 | | YAKJD-78AB | YAKJD- | 

请原谅我悲伤的表,我不是最好的格式。 我将能够在Excel中实现相同的结果(假设我想使用的零件编号在单元格A1:

 =SUBSTITUTE(A1,TRIM(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",255)),255)),"") 

我希望这是有道理的。 提前感谢任何帮助。

testing数据

 DECLARE @TABLE TABLE (partnum VARCHAR(100)) INSERT INTO @TABLE VALUES ('H24897-D-001'), ('BHF44-82-V-1325'), ('BKNG5222'), ('YAKJD-78AB') 

询问

 SELECT PartNum ,REVERSE( SUBSTRING(REVERSE(Partnum), CHARINDEX('-',REVERSE(Partnum)) , LEN(Partnum) - CHARINDEX('-',REVERSE(Partnum)) + 1) ) AS Result FROM @TABLE 

OUTPUT

 ╔═════════════════╦═════════════╗ ║ PartNum ║ Result ║ ╠═════════════════╬═════════════╣ ║ H24897-D-001 ║ H24897-D- ║ ║ BHF44-82-V-1325 ║ BHF44-82-V- ║ ║ BKNG5222 ║ BKNG5222 ║ ║ YAKJD-78AB ║ YAKJD- ║ ╚═════════════════╩═════════════╝ 

使用相反的function来翻转它。 这将允许你find你正在寻找的angular色的最后一个实例(它成为第一个)。 那么这是一个简单的子string。 (MID在Excel中)

 substring(partnum,1,len(partnum)-charindex("-",reverse(partnum))