SQL Server извлекает подстроку из двух символов - PullRequest
1 голос
/ 27 октября 2011

В поисках хорошего способа выполнения следующих операций со строками в SQL Server (2008):

С учетом строки, подобной следующей (URL):

/path/page.aspx?variable=value

Мне нужно извлечь "page.aspx". Таким образом, правилом будет захват текста между последним экземпляром косой черты ("/") и первым знаком вопросительного знака ("?").

Важно отметить, что в строке может быть ноль или более косых черт и ноль или более знаков вопроса. Таким образом, следующие данные будут действительными:

/page.aspx?variable=value
page.aspx?variable=value
/path/page.aspx
page.aspx

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

Это должно обрабатывать все случаи, включая пропущенные косые черты или вопросительные знаки:

DECLARE @TestData TABLE
(
    URL VARCHAR(500)
)

INSERT INTO @TestData(URL) VALUES ('/path/page.aspx?variable=value')
INSERT INTO @TestData(URL) VALUES ('/page.aspx?variable=value')
INSERT INTO @TestData(URL) VALUES ('page.aspx?variable=value')
INSERT INTO @TestData(URL) VALUES ('/path/page.aspx')
INSERT INTO @TestData(URL) VALUES ('page.aspx')


SELECT
    URL,
    SUBSTRING(URL, 
        ISNULL(2 + LEN(URL) - NULLIF(CHARINDEX('/', REVERSE(URL)), 0), 0), 
        CASE CHARINDEX('?', URL) WHEN 0 THEN LEN(URL) + 1 ELSE CHARINDEX('?', URL) END - 
        ISNULL(2 + LEN(URL) - NULLIF(CHARINDEX('/', REVERSE(URL)), 0), 0)) AS Page
FROM
    @TestData
0 голосов
/ 11 сентября 2013

Я знаю, что это старый, но здесь есть ссылка на отличные функции управления текстом для Sql Server. http://bradsruminations.blogspot.com/2010/01/handy-string-functions.html Вы хотите функцию STREXTRACT().

0 голосов
/ 27 октября 2011
SELECT SUBSTRING(url, 
                 LEN - CHARINDEX(REVERSE(url), '/') - 1,
                 CHARINDEX(url, '?') - (LEN - CHARINDEX(REVERSE(url), '/'))
                )

Это, вероятно, сработает (или, может быть, с некоторыми незначительными изменениями, которые я не проверял).

...