我有一个充满日志的SQL表,显示了我页面的响应时间。例如:
/MyPage1.aspx
/MyPage2.aspx
/MyPage3.aspx?index=4
/MyPage3.aspx?index=5
/MyPage3.aspx?index=7
但是,我想创建一个视图,向我显示每个页面的平均加载时间。为此,我不希望包含查询字符串,因为我只想在问号之前按网址对页面进行分组(因此/MyPage3.aspx
只显示一次)。
这里用什么字符串函数去除查询字符串?
答案 0 :(得分:7)
这里棘手的部分是....数据并不总是包含?标记。你能找到的位置吗?使用charindex,但要选择它左边的数据,你需要使用CharIndex - 1.如果?找不到,CharIndex返回0,Left(数据,0-1)导致错误。
简单的解决方案是确保CharIndex总能找到一些东西。像这样:
Select Left(URL, CharIndex('?', URL + '?')-1)
From @Temp
请注意我执行URL +'的CharIndex?'。如果数据不包含问号,则charindex函数将返回一个大于字符串长度的值1,该字符串适用于左侧函数。
答案 1 :(得分:2)
SELECT
CASE
WHEN CHARINDEX('?', url) > 0 THEN SUBSTRING(Url, 1, CHARINDEX('?', url) - 1)
ELSE Url
End As PageOnly
FROM
TableName
答案 2 :(得分:0)
像这样的东西
LEFT(fieldName,CHARINDEX('。aspx',fieldName)+ 5)
您不需要IF语句,因为您的示例每个URL都有一个ASPX扩展名。
答案 3 :(得分:0)
这将为您提供所有唯一的网址,以及每条网址的记录次数。
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
答案 4 :(得分:0)
您需要将SUBSTRING与CHARINDEX函数结合使用,因此您的SQL查询看起来像
SELECT SUBSTRING([PageColName], 0, CHARINDEX('?', [PageColName])) AS 'Page',
LoadTime
FROM [TableName]
将[PageColName]替换为包含页面的列的名称,将[TableName]替换为您要查询的表的名称,然后设置。