如何从T-SQL中的字段中删除Querystring?

时间:2011-04-14 22:59:15

标签: sql-server sql-server-2005 tsql

我有一个充满日志的SQL表,显示了我页面的响应时间。例如:

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

但是,我想创建一个视图,向我显示每个页面的平均加载时间。为此,我不希望包含查询字符串,因为我只想在问号之前按网址对页面进行分组(因此/MyPage3.aspx只显示一次)。

这里用什么字符串函数去除查询字符串?

5 个答案:

答案 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]替换为您要查询的表的名称,然后设置。