从文本字符串中挑选数字字符串

时间:2015-07-14 19:00:38

标签: sql tsql sql-server-2005

我有一个文本字段,其中包含可变长度的条目:

"house:app.apx&resultid=1234,clientip"

"tost:app.apx&resultid=123,clientip"

"airplane:app.apx&resultid=123489,clientip"

我试图找出resultid='...',clientip之间的数字,无论字符串的其余部分是什么样的。所以在这个例子中它将是数字:

1234
123
12389

resultid='...',clientip形式的字符串部分总是保持不变,除了数字的长度可以变化。

3 个答案:

答案 0 :(得分:1)

这应该有效:

-- test data
DECLARE @t table (String VARCHAR(100))
INSERT @t VALUES 
('"house:app.apx&resultid=1234,clientip"'),
('"tost:app.apx&resultid=123,clientip"'),
('"airplane:app.apx&resultid=123489,clientip"')


SELECT 
  SUBSTRING(
    String, 
    CHARINDEX('resultid=', String) + 9, 
    CHARINDEX(',clientip', String) - CHARINDEX('resultid=', String) - 9
  ) 
FROM @t

-- Result
1234
123
123489

您可能希望添加某种检查,以便不处理空值。

答案 1 :(得分:0)

可以使用字符串函数

完成
select SUBSTRING("house:app.apx&resultid=1234,clientip",
                           CHARINDEX('=',"house:app.apx&resultid=1234,clientip"),
                           CHARINDEX(',',"house:app.apx&resultid=1234,clientip") - CHARINDEX('=',"house:app.apx&resultid=1234,clientip"));

答案 2 :(得分:0)

与@Rahul相似但有些不同并使用PATINDEX:

declare @start varchar(20) = '%resultid=%'
declare @end varchar(20) = '%,clientid%'
SELECT REPLACE(REPLACE(SUBSTRING(Field,PATINDEX(@start,Field)),@start,''),@end,'')