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

はい。クエリ文字列をフィルタリングするのと同じ方法で、/と。をフィルタリングします。関数が必要ですSUBSTRING。/の最後の出現を見つけるには、REVERSE関数を使用します。

すなわち。

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 に答える
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
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 に答える