2011-04-14 3 views
1

내 페이지의 응답 시간을 보여주는 로그로 가득 찬 SQL 테이블이 있습니다. 예 :T-SQL의 필드에서 Querystring을 제거하는 방법은 무엇입니까?

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

그러나 각 페이지의 평균로드 시간을 보여주는보기를 만들고 싶습니다. 이렇게하려면 물음표 앞에 URL로 페이지를 그룹화하기 때문에 쿼리 문자열을 포함시키지 않아야합니다 (따라서 /MyPage3.aspx은 한 번만 나타납니다).

여기서 쿼리 문자열을 제거하는 데 적합한 문자열 함수는 무엇입니까? 이

LEFT (fieldName에, CHARINDEX ('. 영문'의 fieldName) + 5)

당신은 예를 들어 모든 URL이 ASPX 확장명이 이후 IF 문을 필요하지 않습니다 같은

답변

5

여기 까다로운 부분은 .... 데이터에는 항상? 표. 당신은?의 위치를 ​​찾을 수 있습니까? charindex를 사용하지만, 왼쪽에있는 데이터를 선택하려면 CharIndex - 1을 사용해야합니다. charIndex가 0을 반환하고 Left (데이터, 0-1)가 오류를 반환합니다.

간단한 해결책은 CharIndex가 항상 찾을 수있는 것이 있는지 확인하는 것입니다. 이와 같이 :

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

URL + '?'의 CharIndex에 유의하십시오. 데이터에 물음표가 없으면 charindex 함수는 왼쪽 함수에 대해 잘 작동하는 문자열의 길이보다 큰 값 1을 반환합니다.

+0

축하해, 좋은 속임수! – jaraics

0

이렇게하면 모든 고유 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

당신은 당신의 SQL 쿼리

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

처럼 보일 것이다 있도록 페이지가 당신의 컬럼의 이름으로 [PageColName] 교체는 CHARINDEX 기능과 함께 문자열을 사용하는 것이 좋습니다 , [TableName]뿐만 아니라 쿼리하는 테이블의 이름과 함께 설정해야합니다.

+0

? 행이있는 행에 대해 올바른 결과를 반환하지 않습니까? 은 (는) URL에 없습니다. –

2
SELECT 
    CASE 
     WHEN CHARINDEX('?', url) > 0 THEN SUBSTRING(Url, 1, CHARINDEX('?', url) - 1) 
     ELSE Url 
    End As PageOnly 
FROM 
    TableName 
관련 문제