在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)),"")
我希望这是有道理的。提前感谢您提供的任何帮助。
答案 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))