0

我的示例表数据是:

表数据

我的 sql 查询是:

SELECT
Distinct
   CASE CHARINDEX( '?', SessionURL)
       WHEN 0 THEN SessionURL
       ELSE LEFT(SessionURL, CHARINDEX( '?', SessionURL) - 1) END AS VisitPage, count(*) as [VisitTime] 
FROM SessionTracker  
 group by SessionURL
order by [VisitTime] desc

查询成功运行并返回一个没有查询字符串的值。上述数据的平均结果是:

结果
但我只想要一个格式的结果:

Default
Modules

是否有可能在 sql 查询中使用这种类型的过滤器。如果是,请提出一种方法。谢谢。

4

3 回答 3

0
declare @t table(path varchar(100))
insert into @t (path)
select 'http://localhost:58588/default.aspx'  union all
select 'http://localhost:58588/default.aspx'  union all
select 'http://localhost:58588/super-user/modules.aspx'  

select 
    distinct replace(right(path,charindex('/',reverse(path))-1),'.aspx','') 
from 
    @t
于 2012-07-17T09:29:07.623 回答
0

尝试这个

declare @Path varchar(500)='http://somename/some_name.aspx'
SELECT  replace(substring(@Path,len(@Path)-
CHARINDEX('/',REVERSE(@Path))+2,len(@Path)),'.aspx','')
于 2012-07-17T08:42:02.967 回答
0

是的。与过滤查询字符串的方式相同,过滤 / 和 . 你需要这个SUBSTRING功能。要查找 / 的最后一次出现,请使用该REVERSE函数。

IE。

select pagename, COUNT(*)
from
(
    select 
        reverse(case CHARINDEX('/', withoutsuf) when 0 then withoutsuf 
        else LEFT(withoutsuf,CHARINDEX('/', withoutsuf)-1 ) end) as pagename
    from
    (
        select 
            substring(withoutq, CHARINDEX('.', withoutq)+1, LEN(withoutq)) withoutsuf
        from
        (
            select
                REVERSE(
                    CASE CHARINDEX( '?', SessionURL) 
                    WHEN 0 THEN SessionURL 
                    ELSE LEFT(SessionURL, CHARINDEX( '?', SessionURL) - 1) END) as withoutq
            from SessionTracker
        ) v
    ) v
) v
group by pagename
于 2012-07-17T08:26:21.057 回答