返回具有已知前缀和后缀字符

时间:2016-12-22 15:06:29

标签: sql sql-server tsql substring

我有一个表,其前缀可变长度始终以.结尾,后缀可变长度始终以-开头。 -也可以在我要查找的文本字符串中找到,因此使用REVERSE()可能是识别后缀-的最佳方式。

ex: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]

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

这里varaiable仅用作演示 - 也应该与你的桌子一起使用:

DECLARE @s nvarchar(100) = 'Prefix1.ABC-123-Suffix1'

SELECT @s,
       SUBSTRING(@s, 1, CHARINDEX('.', @s)-1) StrippedPrefix,
       SUBSTRING(@s, LEN(@s)-CHARINDEX('-', REVERSE(@s))+2, CHARINDEX('-', REVERSE(@s))) StrippedSuffix,
       SUBSTRING(@s, CHARINDEX('.', @s)+1, LEN(@s)-CHARINDEX('.', @s)-CHARINDEX('-', REVERSE(@s))) NewString

答案 2 :(得分:0)

这是一种方式

DECLARE @str VARCHAR(100)= 'Prefix1.ABC-123-Suffix'

SELECT Reverse(Stuff(intr_str, 1, Charindex('-', intr_str), ''))
FROM   (SELECT Reverse(Stuff(@str, 1, Charindex('.', @str), '')) AS intr_str) a 

结果: ABC-123