Как удалить Querystring из поля в T-SQL? - PullRequest
1 голос
/ 15 апреля 2011

У меня есть таблица SQL, полная журналов, которая показывает время ответа моих страниц. Например:

/MyPage1.aspx
/MyPage2.aspx
/MyPage3.aspx?index=4
/MyPage3.aspx?index=5
/MyPage3.aspx?index=7

Однако я хочу создать представление, показывающее мне среднее время загрузки для каждой страницы. Для этого я не хочу, чтобы строки запроса были включены, поскольку я просто хочу сгруппировать страницы по их URL-адресу до знака вопроса (поэтому /MyPage3.aspx отображается только один раз).

Какие строковые функции подходят здесь для удаления строки запроса?

Ответы [ 5 ]

7 голосов
/ 15 апреля 2011

Сложная часть здесь ... данные не всегда включают? отметка. Вы можете найти положение? используя charindex, но чтобы выбрать данные слева от него, вам нужно использовать CharIndex - 1. Если? не найден, CharIndex возвращает 0, а Left (data, 0-1) приводит к ошибке.

Простое решение - убедиться, что CharIndex всегда найдет что-то для себя. Как это:

Select Left(URL, CharIndex('?', URL + '?')-1)
From   @Temp

Обратите внимание, что я делаю CharIndex для URL + '?'. Если данные не содержат вопросительный знак, функция charindex вернет значение на 1 больше длины строки, что хорошо работает для левой функции.

2 голосов
/ 15 апреля 2011
SELECT
    CASE
        WHEN CHARINDEX('?', url) > 0 THEN SUBSTRING(Url, 1, CHARINDEX('?', url) - 1)
        ELSE Url
    End As PageOnly
FROM
    TableName
0 голосов
/ 15 апреля 2011

Это даст вам все уникальные URL и количество раз, когда каждый был зарегистрирован.

select UrlOnly, COUNT(*) as CountTimes
from
(
select
    case
    when URL like '%?%' then STUFF(URL, charindex('?',URL), LEN(URL), '')
    else URL
    end as UrlOnly
from tbl
) X
group by UrlOnly
0 голосов
/ 15 апреля 2011

Вы захотите использовать SUBSTRING в сочетании с функциями CHARINDEX, поэтому ваш SQL-запрос будет выглядеть примерно так:

SELECT SUBSTRING([PageColName], 0, CHARINDEX('?', [PageColName])) AS 'Page', 
       LoadTime 
  FROM [TableName]

Замените [PageColName] на имя вашего столбца, в котором есть страницы, а также [TableName] на имя таблицы, из которой вы запрашиваете, и вы должны быть установлены.

0 голосов
/ 15 апреля 2011

как то так

ВЛЕВО (fieldName, CHARINDEX ('. Aspx', fieldName) + 5)

Вам не нужен оператор IF, поскольку в вашем примере каждый URL имеет расширение ASPX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...