2016-01-12 2 views
1

У меня есть строка из нескольких URL-адресов, начиная с двух символов, за которыми следуют цифры 1-6, например. 'SO123456' Эта строка редко находится в одной позиции в URL-адресе. После строки находится либо .html, либо пробел.Разбор URL-адреса для поиска строки переменной длины

SELECT SUBSTRING(URL,PATINDEX('%SO[0-9]%',URL),8) 

FROM Table 

WHERE URL LIKE '%SO[0-9]%' 

Этот код возвращает «SO12.htm», если строка короче 8 символов.

Не все URL-адреса имеют эту строку, и если это так, то мне все еще нужен запрос для создания «Null».

Я пытаюсь вернуть точную длину строки. Может ли кто-нибудь помочь мне, чтобы решить это, пожалуйста? Можете ли вы найти длину подстановочной строки для использования в подстроке, чтобы вернуть только точную длину строки?

Большое спасибо.

+0

Возможный дубликат: http://stackoverflow.com/questions/9772566/using-patindex-to-find-varying-length-patterns- in-t-sql – JimmyB

+0

Не знаете, как связать это с моей проблемой – Tyler

+0

[Этот ответ] (http://stackoverflow.com/a/9778647/1015327) показывает, как извлечь подстроку, соответствующую шаблону из строки. То же самое должно сработать для вас. Затем возьмите длину этой строки. – JimmyB

ответ

0

Не совсем подробно, но как намек, чтобы вы начали:

patindex = PATINDEX('%SO[0-9]%',URL) -> Index of the start of the pattern 
charindex = CHARINDEX('.html', URL, patindex) -> Index of the first '.html' after the start of the pattern. 
patternLen = charindex - patindex 

так SOMET повесят как следующий может работать:

SELECT 
    CHARINDEX('.html', URL, 
    PATINDEX('%SO[0-9]%',URL) 
) - 
    PATINDEX('%SO[0-9]%',URL) 
FROM ... 

Не все URL-адреса имеют эту строку, и если это так, то я еще нужен запрос для получения «Null».

-> Outer (Я) присоединиться:

SELECT 
    allUrls.URL, 
    CHARINDEX('.html', u.URL, PATINDEX('%SO[0-9]%',u.URL)) - PATINDEX('%SO[0-9]%', u.URL) -- Same as above 
FROM MyTable allUrls 
LEFT OUTER JOIN MyTable u 
    ON allUrls.URL = u.URL 
    AND u.URL LIKE '%SO[0-9]%' 
+0

Благодарим вас за разъяснение. – Tyler

0

Я думаю, что вы должны проверить длину столбца первого чувака. Вот код

SELECT CASE LEN(URL) -- Check the length of URL column 
WHEN > 8 THEN SUBSTRING(URL,PATINDEX('%SO[0-9]%',URL),8) 
ELSE -- do your stuff 
END as 'example' 
FROM Table 
+0

Каждый URL больше 8 символов, 8 - максимальное количество символов, которые могут заинтересовать строки. – Tyler

0

Попробуйте это: Выберите случай, когда PATINDEX ('% SO [0-9] &', URL) = 0, то нуль еще подстроки (URL, PATINDEX ('% SO [0- 9] &», URL), 8)

Из таблицы

Смежные вопросы