在上次重复字符后删除字段的文本

时间:2014-07-23 21:05:21

标签: sql sql-server excel tsql ssms

在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)),"")

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

2 个答案:

答案 0 :(得分:2)

测试数据

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

输出

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

答案 1 :(得分:1)

使用反向功能将其翻转。这将允许您找到您正在寻找的角色的最后一个实例(它成为第一个)。然后它是一个简单的子串。 (Excel中的MID)

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