2011-01-25 5 views

ответ

5

Попробуйте это

; 
With MyTable as 
(
    SELECT 'okbogkbogkbokgbokgobkgobkofkgbokfgbo&name=fokdofkd&okfaos' FullString 
    UNION 
    SELECT 'fkgbokfgbo&name=fokdofkd&okfaos' FullString 
    UNION 
    SELECT 'okbogkbogkbokgbok' FullString 
), 
PatternIndex as 
(
    Select 
     FullString + '&' FullString, 
     CharIndex ('&name=', FullString) + 1 LocationOfEqualSign, 
     CharIndex ('&', FullString, CharIndex ('&name=', FullString)+1) as NextBreak 
    from MyTable 
), 
SplitNameValue AS 
(
    Select 
     FullString, 
     CASE 
      WHEN NextBreak <> 0 THEN 
      SubString (FullString, LocationOfEqualSign, NextBreak-LocationOfEqualSign) 
      ELSE '' END 
     as NameValuePair 
    From PatternIndex 
) 
SELECT * 
FROM SplitNameValue 

Возвращает

FullString            NameValuePair 
--------------------------------------------------------- --------------------------------------------------------- 
fkgbokfgbo&name=fokdofkd&okfaos       name=fokdofkd 
okbogkbogkbokgbok           
okbogkbogkbokgbokgobkgobkofkgbokfgbo&name=fokdofkd&okfaos name=fokdofkd 

(3 row(s) affected) 
+0

Мне нужно сначала выбрать поле из базы данных. Я не могу использовать жестко закодированное значение – Himberjack

+0

@oshafran Посмотрите мой первый выбор под WITH - замените это на инструкцию SELECT, например 'SELECT Youfield, как FullString From YourTable' –

+0

Неверный параметр длины передается функции LEFT или SUBSTRING. – Himberjack

1

Это будет работать, я думаю:

Declare @String varchar(100) 

Set @String = 'okbogkbogkbokgbokgobkgobkofkgbokfgbo&name=fokdofkd&okfaos' 

Select SubString(@String,CharIndex('name=',@String),len(@String)) 

Это дает:

+1

длина 9999 не является правильным, так как может следовать более и имя = значение – Matten

+0

@Matten - Как вы знаете, что? Это не указано в вопросе. –

+0

в названии '@ String' следует за' & okfaos' после '& name = fokdofkd', я не думаю, что' & okfao' принадлежит к ценности, которую хочет разгадать. – Matten

1
SELECT 'name=' + SUBSTRING(field, CHARINDEX('name=', field), CHARINDEX('&', SUBSTRING(field, CHARINDEX('name=' ,field)))) 
1

Что-то

'Name = fokdofkd & okfaos' вдоль линий ...

select substring(ColumnName, charindex('name=',ColumnName,1),len(ColumnName)) 
Смежные вопросы