我有一个文本字段,其中包含可变长度的条目:
"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
形式的字符串部分总是保持不变,除了数字的长度可以变化。
答案 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,'')