2010-05-27 40 views
7

我已经卡在子字符串。SQL子字符串和最后索引

在输入我有一个字符串看起来像Sometext (123456)。最后那些数字是随机的。我只需要从该字符串中获取文本。

+0

更多实例。所以你想要“Sometext()”或“Sometext”?如果你有“Sometext(123ABC456          )”? – gbn 2010-05-27 09:20:12

+0

我只有大括号内的数字 – 2010-05-27 10:04:25

回答

9

这个怎么样?

DECLARE @Data TABLE (Val VARCHAR(20)) 
INSERT @Data VALUES ('Sometext (123456)') 
INSERT @Data VALUES ('') 
INSERT @Data VALUES (NULL) 
INSERT @Data VALUES ('S(123456)') 
INSERT @Data VALUES ('(123456)') 

SELECT 
    CASE 
     WHEN CHARINDEX('(', Val) > 0 THEN 
      RTRIM(SUBSTRING(val,1, CHARINDEX('(', Val) - 1)) 
     ELSE Val 
    END 
FROM @Data 
1

如果你只是想在第一部分至“(”你可以尝试

declare @t varchar(50) 
set @t = 'function (12343)' 

select rtrim(substring(@t,1, charindex('(', @t)-1)) 
3

这确实取决于你的输入字符串的格式,但这里是使用略有不同的方法PATINDEX直到非AZ字符匹配,将返回字符串:

declare @text varchar(500); set @text = 'Sometext (123456)' 
select SUBSTRING(@text, 0, PATINDEX('%[^A-Z]%' , @text)) 
4

如果我们要删除这句话,保持我们可以做这样的数量

DECLARE @Text VARCHAR(MAX); 
SET @Text = 'Sometext (123456)' 

SELECT SUBSTRING(@Text, CHARINDEX(' ', @Text) + 1, LEN(@Text)) As TextOutput 

其结果将是:(123456)