0

次のようなデータがあります。

**User  URL**
1   http://www.groupon.com/
1   http://www.groupon.com/
1   http://www.groupon.com/
2   http://www.wikihow.com/Main-Page
2   http://www.wikihow.com/Main-Page
3   http://www.google.com/imghp
3   http://www.google.com/imghp

次のように、ドメインを別の列に抽出したいと思います。

**User  URL                             Domain**
1   http://www.groupon.com/             groupon.com
1   http://www.groupon.com/today        groupon.com
1   http://www.groupon.com/deals        groupon.com
2   http://www.wikihow.com/Main-Page    wikihow.com
2   http://www.wikihow.com/Main-Page    wikihow.com
3   http://www.google.com/imghp         google.com/imghp
3   http://www.google.com/flights           google.com 

初心者としてこれを行う方法がわからない。私の直感では、'://' と次の '/' の間のすべてを抽出する必要があります。

このように始めたいと思いますが、3 番目の SUBSTR 引数の長さを取得する方法がわかりません (必要な長さは、3 番目の '/' の場所から 2 番目の '/' の場所を差し引いたものであることがわかっています):

SUBSTR(URL, INDEX(URL, "://)+7, ???)

追加のボーナス: 非常に特殊なケース (google.com/imghp) の場合、ドメイン列にドメインだけでなく google.com/imghp を表示する必要があります。

この例外のコードも手伝っていただけると、とても助かります。

ありがとう。

4

3 に答える 3

0

ネストされた CHARINDEX を使用して、SUBSTR の 3 番目のパラメーターを取得できます。CHARINDEX には、検索を開始する開始位置を指定できるオプションの 3 番目のパラメーターがあります。長く醜いクエリになりますが、探している文字列を取得します。

SUBSTR(URL, CHARINDEX(URL, [開始点]), (CHARINDEX(URL, [終了点], (CHARINDEX(URL, [開始点])))-CHARINDEX(URL, [開始点])))

「特殊なケース」については、CASE ステートメントで LIKE '%google.com/imghp%' を使用して処理できます。

私が本当に懸念しているのは、考慮していないドメインを取得するためのルールを破る多くの URL 形式が存在する可能性があることです。どうですか:

www.SomeDepartment.SomeCompany.com

www.SomeCompany.com.CountryCode

www2.SomeCompany.com

5 つ以上の要素を含む .edu URL を見たことがありますか? この情報の消費者に、考えられる URL 形式で「ドメイン」を正確に構成するものについて明確なビジネス ルールを求めます。

于 2013-10-29T17:41:06.140 に答える
0

これは最良の答えではないかもしれませんが、うまくいきます。私のコードを改善できます。私が作成したSQL Fiddleを参照してください。それが理にかなっていることを願っています

CREATE TABLE myurls 
    (
     user int, 
     url varchar(40), 
     domain varchar(40)
    );

INSERT INTO myurls
(user, url)
VALUES
('1', 'http://www.groupon.com'),
('1', 'http://www.groupon.com'),
('2', 'http://www.wikihow.com/Main-Page'),
('2', 'http://www.wikihow.com/Main-Page');


SELECT user, url, SUBSTRING(url, 11, 100) AS domains
FROM myurls;
于 2013-10-29T18:35:02.930 に答える
0

私はあなたのテストケースと、私が自分の答えを開発しているときに考えたいくつかの追加を作成しました:-

set nocount on
go
create table #log (
    url varchar(50)
)
go
insert into #log values('http://www.groupon.com/')
insert into #log values('http://www.groupon.com/today')
insert into #log values('https://groupon.com/deals')
insert into #log values('http://www.wikihow.com/Main-Page')
insert into #log values('http://www.wikihow.com/Main-Page')
insert into #log values('https://www.google.com/imghp')
insert into #log values('http://google.com/flights')
insert into #log values('http://www.amazon.com/cameras')
insert into #log values('https://www.amazon.co.uk/cameras')
go

そして、この関数を作成しました:-

create function dbo.GetDomain(@url varchar(1024)) 
returns varchar(1024) as begin
    declare @returnValue varchar(1024)
    declare @position int
    declare @pattern varchar(50)
    if CHARINDEX('google.com/imghp',@url)>0 --if it's your special case
        set @returnValue='google.com/imghp'
    else begin
        set @url=replace(@url,'http://','') --strip off typical prefixes
        set @url=replace(@url,'https://','')
        set @position=CHARINDEX('/',@url) --check if there is a slash
        if @position>0
            set @url=left(@url,@position-1) --and strip it and everything after it off
        select @pattern=case
            when PATINDEX('%.co.uk',@url)>0 then '%.%.%.%' --repeat this line for any other exceptions
            else '%.%.%'
        end
        while PATINDEX(@pattern,@url)>0 begin --now check if our pattern matches
            set @url=SUBSTRING(@url,CHARINDEX('.',@url)+1,1024) --and strip off the prefix if it does
        end
        set @returnValue=@url
    end
    return @ReturnValue
end
go

呼び出されたとき:-

select *, dbo.GetDomain(url) as domain
from #log
go

生成:-

url                               domain
http://www.groupon.com/           groupon.com
http://www.groupon.com/today      groupon.com
https://groupon.com/deals         groupon.com
http://www.wikihow.com/Main-Page  wikihow.com
http://www.wikihow.com/Main-Page  wikihow.com
https://www.google.com/imghp      google.com/imghp
http://google.com/flights         google.com
http://www.amazon.com/cameras     amazon.com
https://www.amazon.co.uk/cameras  amazon.co.uk
于 2013-10-30T01:20:33.707 に答える