2015-07-14 3 views
0

У меня есть текстовое поле, которое имеет записей переменной длины формы:Выбор номера строки из текста Строка

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

или

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

или

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

Я m пытается выбрать числа между resultid='...',clientip независимо от того, как выглядит остальная часть строки. Таким образом, в этом примере было бы цифры:

1234 
123 
12389 

часть строки формы resultid='...',clientip всегда остается неизменным, за исключением длины номера может изменяться.

+0

Используйте 'substring' вместе с' charindex'. – jpw

+0

Эти данные вы извлекаете из базы данных или пытаетесь сделать это в хранимой процедуре в базе данных? – MiltoxBeyond

+0

[Что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – HABO

ответ

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")); 
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 

Вы можете добавить какой-то чек, так что вы не обрабатывать пустые значения.

0

Подобно @Rahul, но несколько отличается и использование PATINDEX:

declare @start varchar(20) = '%resultid=%' 
declare @end varchar(20) = '%,clientid%' 
SELECT REPLACE(REPLACE(SUBSTRING(Field,PATINDEX(@start,Field)),@start,''),@end,'') 
Смежные вопросы