我有一个表,它有一个始终以 .
结尾的可变长度前缀和一个始终以 -
开头的可变长度后缀。 -
也可以在我要查找的文本字符串中找到,因此使用 REVERSE() 可能是识别后缀 -
的最佳方法。
例如:Prefix1.ABC-123-Suffix1
我希望 SUBSTRING() 结果看起来像:ABC-123
我能够创建一个 SUBSTRING()
来删除前缀和一个 SUBSTRING()
来删除后缀,但是我很难应用两个都。返回的文本可以是可变长度的。
我试图避免声明一个变量,但我对此持开放态度。如果可能,我宁愿只使用 SUBSTRING()、REVERSE() 和 CHARINDEX()。
这是我目前所拥有的:
SELECT [Col1]
,SUBSTRING((Col1),CHARINDEX('.', (Col1)) + 1, 999) AS [StrippedPrefix]
,REVERSE(SUBSTRING(REVERSE(Col1),CHARINDEX('-', REVERSE(Col1)) + 1, 999)) AS [StrippedSuffix]
--new SUBSTRING() with both Prefix and Suffix stripped
FROM [Table1]
最佳答案
Declare @YourTable table (Col1 varchar(50))
Insert Into @YourTable values
('Prefix1.ABC-123-Suffix1')
Select *
,String=Substring(Col1,charindex('.',Col1)+1,len(Col1)-charindex('.',Col1)-charindex('-',reverse(Col1)))
From @YourTable
返回
Col1 String
Prefix1.ABC-123-Suffix1 ABC-123
按照 M Ali 的建议(更好)
Select *
,String=PARSENAME(REPLACE(Col1 , '-', '.') , 3) + '-' + PARSENAME(REPLACE(Col1 , '-', '.') , 2)
From @YourTable
关于sql - 返回具有已知前缀和后缀字符的 SUBSTRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286121/